我有一個小型的C#web應用程序。如何獲取允許用戶通過HTTP POST發送文件的c#代碼。它應該能夠發送文本文件,圖像文件,excel,csv ,doc(所有類型的文件),而不使用流讀取器和所有。在c#中使用HTTP POST發送文件
回答
你可以試試下面的代碼:
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;
}
只是傾銷50行代碼不是答案。這個問題有很多答案,許多這樣的代碼已經內置在.NET類型中,比如WebClient和HttpClient。 – CodeCaster
你能解釋一下接收者頁面的檢索過程嗎? –
你可以舉一個URL的例子.. 它包含文件名嗎? –
試試這個
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);
}
使用.NET 4.5(或通過添加的NuGet的Microsoft.Net.Http包.NET 4.0)有一個更簡單的方法模擬表單請求。這裏有一個例子:
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;
}
}
是否必須始終使用多部分表單數據? – Abhijeet
- 1. 使用HTTP POST發送文件> 1MB
- 2. 使用C++發送使用http POST的文件
- 3. 發送和使用HTTP POST
- 4. 使用System.Net.WebClient發送HTTP POST
- 5. 如何在android中使用http post方法發送文件?
- 6. 無法在angularJS中使用$ http post方法發送文件
- 7. 在Windows中使用C發送HTTP GET或POST請求
- 8. EBAY - 通過http post發送文件?
- 9. 在C#中使用PHP POST發送文件#
- 10. 在C++中使用POST [無法上載]發送文件
- 11. 用C/C++中的winsocks發送原始請求(http post文件數據)
- 12. 使用http-conduit在Haskell中發送HTTP/POST的基本方法
- 13. 發送json http post
- 14. 如何使用http post發送文件?德爾福2009年
- 15. 使用http-post發送xml文件到處理程序
- 16. Http POST如何使用multipart/form-data發送JSON文件內部
- 17. 使用HTTP POST將文件發送到IIS 7.5虛擬目錄
- 18. 如何使用HTTParty(Net :: HTTP)向服務器發送文件發送POST請求
- 19. 通過HTTP POST發送一個文件與C#
- 20. 使用HttpURLConnection從Android發送HTTP POST
- 21. 使用Http Post發送圖像
- 22. 使用HTTP發送ASCII字符串Post
- 23. 如何使用curl發送HTTP POST?
- 24. 使用NSURLSession HTTP發送Firebase Swift Push Post
- 25. 發送HTTP POST請求使用PHP
- 26. 使用HTTP發送ASCII字符串Post
- 27. HTTP 415使用POST發送JSON對象
- 28. 使得XML在HTTP POST golang發送
- 29. 在WCF中發送HTTP POST中的Xml
- 30. 使用C++ REST SDK發送更新文件內容的HTTP POST請求Casablanca
http://stackoverflow.com/questions/566462/upload-files-with-httpwebrequest-multipart-form-data –
'我已經試過各種方法,但沒有人幫助我。 ' - 如果你展示了一些你已經嘗試過的方法,我們可能會發現他們有什麼問題。現在,很難進行建設性的討論。 –
重複[使用C#通過HTTP POST發送文件](http://stackoverflow.com/questions/1131425/send-a-file-via-http-post-with-c-sharp)和其他各種。顯示你曾經嘗試過的,以及upvoters,請考慮你是upvoting的問題是一個受歡迎的除了網站或只是一個副本。 – CodeCaster