使用HTTP / 1.1 POST将文件上载到ASP Web服务

时间:2011-03-23 15:46:07

标签: asp.net web-services file-upload

我正在尝试通过客户端应用程序的HTTP 1.1 POST将文件上传到ASP 2.0 Web服务。如果我的Web服务功能声明为

<WebMethod()>
Public Function UploadFile(ByVal file as Byte(), ByVal fileName as String) as String
...

测试表格说请求应采用以下形式:

POST address_of_service HTTP/1.1
Host: <host>
Content-Type: application/x-www-form-urlencoded
Content-Length: length

file=string&file=string&fileName=string

如何将二进制文件数据转换为该表单?我试过将文件数据转换为字符串并将其放入正文(file=<string_data_here>)但我收到HTTP 500错误,抱怨无法将其转换为System.Byte。我的应用程序中的HTTP POST工作正常,使用普通的字符串参数。

另外,出于好奇,为什么它会两次显示文件参数?

1 个答案:

答案 0 :(得分:2)

将二进制流转换为基于Base64的字符串,并使用Post将其传递给Web服务。当webservice收到执行调用时,您可以将Base64字符串转换回原始二进制数组序列。

见以下内容;

将文件转换为Base64字符串为POST;

var fileStream = File.Open(<your file path>, FileMode.Open, FileAccess.Read);
var reader = new BinaryReader(fileStream);
var data = new byte[fileStream.Length];
reader.Read(data, 0, data.Length);
var strBase64 = Convert.ToBase64String(data, 0, data.Length);

在SOAP webservice方法中将其转换回二进制文件:

var data = Convert.FromBase64String(<your webmethod input Base64 string>);

免责声明:我提供此示例时没有机会测试它编译,但它应该指向正确的方向来完成您的要求。