Czy jest jakaś klasa, biblioteka lub fragment kodu, który pomoże mi przesłać pliki za pomocą HTTPWebrequest ?
Edycja 2:
Nie chcę przesyłać do folderu WebDAV ani czegoś takiego. Chcę symulować przeglądarkę, tak jak przesyłasz swój awatar na forum lub przesyłasz plik za pomocą formularza w aplikacji internetowej. Prześlij do formularza, który korzysta z danych wieloczęściowych / formularzy.
Edytować:
WebClient nie spełnia moich wymagań, więc szukam rozwiązania z HTTPWebrequest .
.net
upload
httpwebrequest
dr. zło
źródło
źródło
Odpowiedzi:
Wziął powyższy kod i został naprawiony, ponieważ generuje wewnętrzny błąd serwera 500. Występują problemy z \ r \ n źle ustawionymi i spacjami itp. Zastosowano refaktoryzację ze strumieniem pamięci, zapisując bezpośrednio do strumienia żądania. Oto wynik:
i przykładowe użycie:
Można go rozszerzyć, aby obsługiwał wiele plików lub po prostu wywoływał go wiele razy dla każdego pliku. Jednak odpowiada Twoim potrzebom.
źródło
"\r\n--" + boundary + "--\r\n"
W przeciwnym razie dodatkowe pliki zostaną odcięte.Szukałem czegoś takiego, Znalezione w: http://bytes.com/groups/net-c/268661-how-upload-file-via-c-code (zmodyfikowany pod kątem poprawności):
źródło
AKTUALIZACJA: Korzystanie z .NET 4.5 (lub .NET 4.0 poprzez dodanie pakietu Microsoft.Net.Http z NuGet) jest to możliwe bez zewnętrznego kodu, rozszerzeń i manipulacji HTTP „niskiego poziomu”. Oto przykład:
źródło
Moje najczęściej zadawane pytania dotyczące przesyłania ASP.NET zawierają artykuł na ten temat, z przykładowym kodem: Przesyłanie plików za pomocą żądania POST RFC 1867 za pomocą HttpWebRequest / WebClient . Ten kod nie ładuje plików do pamięci (w przeciwieństwie do powyższego kodu), obsługuje wiele plików i obsługuje wartości formularzy, ustawianie poświadczeń i plików cookie itp.
Edycja: wygląda na to, że Axosoft zdjął stronę. Dzięki chłopaki.
Jest nadal dostępny za pośrednictwem archive.org.
źródło
Na podstawie powyższego kodu dodałem obsługę wielu plików, a także bezpośrednie przesyłanie strumienia bez konieczności posiadania pliku lokalnego.
Aby przesłać pliki do określonego adresu URL, w tym niektóre parametry postów, wykonaj następujące czynności:
Aby jeszcze bardziej to ulepszyć, można określić nazwę i typ MIME na podstawie samego pliku.
źródło
coś takiego jest blisko: (nieprzetestowany kod)
źródło
Myślę, że szukasz czegoś bardziej jak WebClient .
W szczególności UploadFile () .
źródło
Wziąłem powyższy i zmodyfikowałem, akceptuje niektóre wartości nagłówka i wiele plików
źródło
\r\n--" + boundary + "--\r\n
Przykład VB (przekonwertowany z przykładu C # na inny post):
źródło
Ostatnio musiałem sobie z tym poradzić - innym sposobem jest skorzystanie z faktu, że WebClient jest dziedziczny i zmiana stamtąd bazowego WebRequest:
http://msdn.microsoft.com/en-us/library/system.net.webclient.getwebrequest(VS.80).aspx
Wolę C #, ale jeśli utkniesz z VB, wyniki będą wyglądać mniej więcej tak:
źródło
Jest inny działający przykład z niektórymi moimi komentarzami:
I jest przykład użycia:
źródło
Chciałem przesłać plik i dodać niektóre parametry do żądania wieloczęściowego / formularza danych w VB.NET, a nie poprzez zwykłe przesyłanie formularzy. Dzięki odpowiedzi na @JoshCodes uzyskałem kierunek, którego szukałem. Zamieszczam moje rozwiązanie, aby pomóc innym znaleźć sposób na wykonanie postu z plikiem i parametrami. Odpowiednikiem html tego, co próbuję osiągnąć, jest: html
Z uwagi na fakt, że muszę podać klucz apiKey i podpis (który jest obliczoną sumą kontrolną parametrów żądania i połączonego łańcucha klucza api), musiałem to zrobić po stronie serwera. Innym powodem, dla którego musiałem to zrobić po stronie serwera, jest fakt, że wysłanie pliku można wykonać w dowolnym momencie, wskazując plik znajdujący się już na serwerze (podając ścieżkę), więc nie będzie ręcznie wybieranego pliku w formularzu w ten sposób plik danych formularza nie zawierałby strumienia pliku. W przeciwnym razie mógłbym obliczyć sumę kontrolną za pomocą wywołania zwrotnego ajax i przesłać plik przez post HTML za pomocą JQuery. Używam .net w wersji 4.0 i nie mogę zaktualizować do wersji 4.5 w rzeczywistym rozwiązaniu. Musiałem więc zainstalować Microsoft.Net.Http za pomocą nuget cmd
źródło
Zmodyfikowano kod @CristianRomanescu do pracy ze strumieniem pamięci, akceptuj plik jako tablicę bajtów, zezwól na zerowy nvc, odpowiedz na żądanie zwrotu i pracę z nagłówkiem autoryzacji. Przetestowałem kod za pomocą Web Api 2.
Kod testowy:
źródło
Dla mnie, następujące prace (głównie inspirowane wszystkimi następującymi odpowiedziami), zacząłem od odpowiedzi Elad i modyfikowałem / upraszczałem rzeczy, aby dopasować je do moich potrzeb (nie usuwaj danych wejściowych z formularza, tylko jeden plik, ...).
Mam nadzieję, że to może komuś pomóc :)
(PS: Wiem, że obsługa wyjątków nie jest zaimplementowana i zakłada, że została napisana wewnątrz klasy, więc mogę potrzebować trochę wysiłku integracyjnego ...)
źródło
Nie jestem pewien, czy to zostało opublikowane wcześniej, ale dostałem to działa z WebClient. przeczytałem dokumentację dla WebClient. Kluczową kwestią, którą robią, jest
Więc wszystko, co zrobiłem, to wc.QueryString.Add („source”, Wygenerowany obraz), aby dodać różne parametry zapytania i jakoś dopasować nazwę właściwości do przesłanego obrazu. Mam nadzieję, że to pomoże
źródło
Napisałem klasę za pomocą WebClient w przeszłości, gdy mam wykonać wieloczęściowe przesyłanie formularza.
http://ferozedaud.blogspot.com/2010/03/multipart-form-upload-helper.html
Będzie to działać ze wszystkimi wersjami środowiska .NET.
źródło
Nigdy nie mogę sprawić, by przykłady działały poprawnie, zawsze otrzymuję błąd 500 podczas wysyłania ich na serwer.
Jednak natrafiłem na bardzo elegancką metodę zrobienia tego w tym adresie URL
Jest łatwo rozszerzalny i oczywiście działa zarówno z plikami binarnymi, jak i XML.
Nazywasz to używając czegoś podobnego do tego
źródło
Sprawdź bibliotekę MyToolkit:
http://mytoolkit.codeplex.com/wikipage?title=Http
źródło
Klient używa konwersji pliku do
ToBase64String
, po użyciu Xml do promowania połączenia z serwerem, ten serwer używaFile.WriteAllBytes(path,Convert.FromBase64String(dataFile_Client_sent))
.Powodzenia!
źródło
Ta metoda umożliwia jednoczesne przesyłanie wielu obrazów
źródło
Zdaję sobie sprawę, że jest to prawdopodobnie bardzo późno, ale szukałem tego samego rozwiązania. Znalazłem następującą odpowiedź od przedstawiciela firmy Microsoft
źródło