如何在同一篇文章中上传数据和文件?

时间:2010-11-25 13:59:48

标签: c# file-upload webclient

我需要将pdf文件和电话号码上传到将发送传真的服务。

有效的表单(来自网页)如下所示:

<form action="send.php" method="post" enctype="multipart/form-data"> 
    <input type="file" name="pdf" id="pdf" /> 
    <input type="text" name="phonenumber" id="phonenumber" /> 
    <input type="submit" name="Submit" /> 
</form> 

问题是我需要从用C#编写的Windows应用程序中完成。

如何在同一篇文章中上传文件和字符串?

我正在使用WebClient课程 我试着打开文件,读取它的字节,然后发布这样的内容:

string content = "phonenumber="+request.PhoneNumber+"&pdf=";

WebClient c = new WebClient();
c.Headers.Add("Content-Type", "multipart/form-data");
c.Headers.Add("Cache-Control", "no-cache");
c.Headers.Add("Pragma", "no-cache");

byte[] bret = null;
byte[] p1 = Encoding.ASCII.GetBytes(content);
byte[] p2 = null;
using (StreamReader sr = new StreamReader(request.PdfPath))
{
    using (BinaryReader br = new BinaryReader(sr.BaseStream))
    {
        p2 = br.ReadBytes((int)sr.BaseStream.Length);
    }
}

byte[] all = new byte[p1.Length + p2.Length];
Array.Copy(p1, 0, all, 0, p1.Length);
Array.Copy(p2, 0, all, p1.Length, p2.Length);

bret = c.UploadData(url, "POST", all);

这不起作用。

我没有服务器日志或类似的东西来帮助我调试它。

我是否遗漏了WebClient班级的简单内容?有没有其他方法可以将UploadFileUploadData结合起来发布两个值,例如网页(有效)?

3 个答案:

答案 0 :(得分:3)

首先,在multipart / form-data标头中执行c.Headers.Add时会出现拼写错误。 : - )

其次,您需要通过在内容部分之间引入边界来正确格式化帖子。看看here

答案 1 :(得分:2)

您必须使用边界分隔上传的数据。有关详细信息,请参阅此post

答案 2 :(得分:0)

这可能会有所帮助,也可能没有帮助,但我注意到了一个错字:

c.Headers.Add("Content-Type", "multipart/form-dat");

应该是

c.Headers.Add("Content-Type", "multipart/form-data");