使用C#通过HTTP POST发送文件

使用C#通过HTTP POST发送文件

我一直在寻找和阅读它,并没有任何真正有用的东西。

我正在编写一个小型C#win应用程序,允许用户将文件发送到Web服务器,而不是通过FTP,而是通过HTTP使用POST。可以把它想象成一个Web表单,但在Windows应用程序上运行。

我使用这样的东西创建了我的HttpWebRequest对象

HttpWebRequest req = WebRequest.Create(uri) as HttpWebRequest

并且还设置了MethodContentTypeContentLength属性。但那就是我能走的远。

这是我的一段代码:

HttpWebRequest req = WebRequest.Create(uri) as HttpWebRequest;req.KeepAlive = false;req.Method = "POST";req.Credentials = new NetworkCredential(user.UserName, user.UserPassword);req.PreAuthenticate = true;req.ContentType = file.ContentType;req.ContentLength = file.Length;HttpWebResponse response = null;try{
    response = req.GetResponse() as HttpWebResponse;}catch (Exception e) {}

所以我的问题基本上是如何通过HTTP POST用C#发送文件(文本文件,图像,音频等)。

谢谢!


LEATH
浏览 3202回答 3
3回答

一只萌萌小番薯

仅发送原始文件:using(WebClient&nbsp;client&nbsp;=&nbsp;new&nbsp;WebClient())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;client.UploadFile(address,&nbsp;filePath);}如果你想用一个模拟一个浏览器表单<input type="file"/>,那就更难了。有关multipart / form-data答案

慕森王

对我来说,client.UploadFile仍然将内容包装在一个多部分请求中,所以我必须这样做:using&nbsp;(WebClient&nbsp;client&nbsp;=&nbsp;new&nbsp;WebClient()){ &nbsp;&nbsp;&nbsp;&nbsp;client.Headers.Add("Content-Type",&nbsp;"application/octet-stream"); &nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(Stream&nbsp;fileStream&nbsp;=&nbsp;File.OpenRead(filePath)) &nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(Stream&nbsp;requestStream&nbsp;=&nbsp;client.OpenWrite(new&nbsp;Uri(fileUploadUrl),&nbsp;"POST")) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileStream.CopyTo(requestStream); &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP