如何使用WebClient.UploadFileAsync上传文件和POST参数?

时间:2011-08-31 13:53:24

标签: c#

我正在使用WebClient.UploadFileAsync将本地文件上传到网络服务器,我也想在帖子中传递一些参数。我想发送一些字段,告诉PHP代码在服务器特定位置上保存上传文件的位置。

我尝试将字段直接放入网址,例如:

WebClient client = new WebClient();
Uri uri = new Uri("http://example.com/upload.php?field1=test");
client.UploadFileAsync(uri, "POST", "c:\test.jpg");

PHP代码对isset($_REQUEST['field1'])返回false。

感谢您提出任何建议。

NOTE: this question was also asked in very similar format for vb.net a while back, but it did not get any answers,

3 个答案:

答案 0 :(得分:0)

我将研究使用WebClient的QueryString属性来设置field1的值(以及请求的任何其他QueryString参数)。

NameValueCollection query = new NameValueCollection();
query.Add("field1", "test");
client.QueryString = query;

参考:http://msdn.microsoft.com/en-us/library/system.net.webclient.querystring(v=VS.100).aspx

答案 1 :(得分:0)

WebClient的UploadFile旨在发送一个文件(作为byte [])作为请求的一部分。根据我的理解,UploadFile方法在写完二进制文件后关闭请求流。

在您的场景中,您实际请求有两个部分1.文件为byte [] 2.文件名为字符串。

为此,您必须使用HttpWebRequest或任何其他能够创建请求的高级类。

请参阅帖子http://www.codeproject.com/KB/cs/uploadfileex.aspx?display=Print 做类似的工作

答案 2 :(得分:0)

This article详细介绍了在使用WebClient上传文件时完成字段发布所需的内容。

  

不幸的是,大多数文件上传方案都是基于HTML格式的,并且可能   除文件数据外还包含表单字段。这是哪里   WebClient持平。在审查了WebClient的源代码之后,   很明显,没有可能重复使用它来执行   文件上传包括其他表单字段。

     

因此,唯一的选择是创建一个符合的自定义实现   到rfc1867,rfc2388和W3C multipart / form-data规范   将使用其他表单字段和公开文件上载文件   控制cookie和标题。