Mam małą aplikację sieci web C#. Jak mogę uzyskać kod C#, który pozwala użytkownikowi na wysyłanie plików przez HTTP POST. Powinien być w stanie wysyłać pliki tekstowe, pliki obrazów, Excel, csv , doc (wszystkie typy plików) bez używania czytnika strumieni i wszystkich.Wysyłanie plików za pomocą HTTP POST w języku C#
Odpowiedz
Można spróbować następujący kod:
public void PostMultipleFiles(string url, string[] files)
{
string boundary = "----------------------------" + DateTime.Now.Ticks.ToString("x");
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "multipart/form-data; boundary=" + boundary;
httpWebRequest.Method = "POST";
httpWebRequest.KeepAlive = true;
httpWebRequest.Credentials = System.Net.CredentialCache.DefaultCredentials;
Stream memStream = new System.IO.MemoryStream();
byte[] boundarybytes =System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary +"\r\n");
string formdataTemplate = "\r\n--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\";\r\n\r\n{1}";
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n Content-Type: application/octet-stream\r\n\r\n";
memStream.Write(boundarybytes, 0, boundarybytes.Length);
for (int i = 0; i < files.Length; i++)
{
string header = string.Format(headerTemplate, "file" + i, files[i]);
//string header = string.Format(headerTemplate, "uplTheFile", files[i]);
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
memStream.Write(headerbytes, 0, headerbytes.Length);
FileStream fileStream = new FileStream(files[i], FileMode.Open,
FileAccess.Read);
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
{
memStream.Write(buffer, 0, bytesRead);
}
memStream.Write(boundarybytes, 0, boundarybytes.Length);
fileStream.Close();
}
httpWebRequest.ContentLength = memStream.Length;
Stream requestStream = httpWebRequest.GetRequestStream();
memStream.Position = 0;
byte[] tempBuffer = new byte[memStream.Length];
memStream.Read(tempBuffer, 0, tempBuffer.Length);
memStream.Close();
requestStream.Write(tempBuffer, 0, tempBuffer.Length);
requestStream.Close();
try
{
WebResponse webResponse = httpWebRequest.GetResponse();
Stream stream = webResponse.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string var = reader.ReadToEnd();
}
catch (Exception ex)
{
response.InnerHtml = ex.Message;
}
httpWebRequest = null;
}
Po prostu wyrzucenie 50 linii kodu nie jest odpowiedzią. Istnieje wiele odpowiedzi na to pytanie i wiele z tego kodu jest (bardziej odporny na błędy) wbudowane w typy .NET, takie jak WebClient i HttpClient. – CodeCaster
Czy możesz po prostu wyjaśnić proces pobierania ze strony odbiornika. –
czy mógłbyś podać przykład adresu URL .. czy zawiera on nazwę pliku? –
spróbować
string fileToUpload = @"c:\user\test.txt";
string url = "http://example.com/upload";
using (var client = new WebClient())
{
byte[] result = client.UploadFile(url, fileToUpload);
string responseAsString = Encoding.Default.GetString(result);
}
Korzystanie z .NET 4.5 (lub .NET 4.0 poprzez dodanie pakietu Microsoft.Net.Http z Nuget) istnieje łatwiejszy sposób symulować żądania formularzy. Oto przykład:
private System.IO.Stream Upload(string actionUrl, string paramString, Stream paramFileStream, byte [] paramFileBytes)
{
HttpContent stringContent = new StringContent(paramString);
HttpContent fileStreamContent = new StreamContent(paramFileStream);
HttpContent bytesContent = new ByteArrayContent(paramFileBytes);
using (var client = new HttpClient())
using (var formData = new MultipartFormDataContent())
{
formData.Add(stringContent, "param1", "param1");
formData.Add(fileStreamContent, "file1", "file1");
formData.Add(bytesContent, "file2", "file2");
var response = client.PostAsync(actionUrl, formData).Result;
if (!response.IsSuccessStatusCode)
{
return null;
}
return response.Content.ReadAsStreamAsync().Result;
}
}
Czy obowiązkowe jest stosowanie wieloczęściowych danych formularza zawsze? – Abhijeet
- 1. Wysyłanie żądania HTTP/2 POST w języku Ruby
- 2. Wysyłanie żądania pocztowego za pomocą sieci/http
- 3. Wysyłanie pliku za pośrednictwem POST przy użyciu surowego HTTP (Putty)
- 4. Wysyłanie żądania HTTP Post z Androidem
- 5. Wysyłanie żądania HTTP POST JSON z Androida
- 6. Wysyłanie POST z WebClient.DownloadString w C#
- 7. Wysyłanie plików za pomocą Google App Engine
- 8. Argumenty HTTP Post C#
- 9. Wysyłanie adresu HTTP za pomocą zdarzenia wyzwalanego przez JavaScript
- 10. Wysyłanie żądania wpisu http w języku Ruby przez sieć :: HTTP
- 11. Wysyłanie powiadomień w języku arabskim za pomocą GCM
- 12. Wysyłanie e-maili za pomocą C
- 13. Wysyłanie żądania HTTP POST w systemie iOS z JSON
- 14. Wysyłanie nagłówków HTTP za pomocą żądania HTTP WWW do uwierzytelniania NTLM
- 15. Wysyłanie żądania POST danych RAW za pomocą formularza HTML?
- 16. Wysyłanie żądania SOAP za pomocą zapytań w języku Python
- 17. Wysyłanie pliku za pomocą gniazd w języku Python
- 18. Wysyłanie żądania JSON POST za pomocą preprocesora BSF
- 19. Jak złożyć formularz http za pomocą C#
- 20. Wysyłanie żądania spotkania Outlook za pomocą C#
- 21. wysyłanie danych XML z wykorzystaniem protokołu HTTP POST w PHP
- 22. Wysyłanie komunikatów Unicode (np. W języku perskim i arabskim) w języku C# za pomocą poleceń AT za pośrednictwem modemu GSM
- 23. Wysyłanie pakietu UDP w języku C#
- 24. Ciągłe wysyłanie wiadomości w języku C#
- 25. Wysyłanie nieprzetworzonych danych za pomocą Pythona
- 26. Wysyłanie pliku obrazu przy użyciu połączeń HTTP POST z java
- 27. Pliki binarne HTTP POST za pomocą Pythona: zwięzłe przykłady nieprzypisane?
- 28. HTTP post danych XML w C#
- 29. Wysyłanie nagłówków http pytonem
- 30. wysyłanie obrazów za pomocą RESTAPI
http://stackoverflow.com/questions/566462/upload-files-with-httpwebrequest-multipart-form-data –
'Próbowałem różnych sposobów, ale żaden z nich nie pomógł mi. '- gdybyś pokazał niektóre z wypróbowanych metod, moglibyśmy zobaczyć, co jest z nimi nie tak. W tej chwili trudno prowadzić konstruktywną dyskusję. –
Duplikat [Wysyłaj plik przez HTTP POST z C#] (http://stackoverflow.com/questions/1131425/send-a-file-via-http-post-with-c-sharp) i wiele innych. Pokaż, co wypróbowałeś, i upvoters, proszę rozważyć, czy pytanie, które przegrywasz, jest mile widzianym dodatkiem do strony lub tylko duplikatem. – CodeCaster