我正在尝试通过客户端应用程序的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工作正常,使用普通的字符串参数。
另外,出于好奇,为什么它会两次显示文件参数?
答案 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>);
免责声明:我提供此示例时没有机会测试它编译,但它应该指向正确的方向来完成您的要求。