在工作中,我们试图使用浏览器端的html 5/javascript和Web服务中的C#将网页上的文件上传到Web服务。但是对某种编码有些麻烦。javascript发送文件二进制数据到网络服务
至于javascript,我们通过FileReader获取文件的二进制数据。
var file = ... // gets the file from an input
var fileReader = new FileReader();
fileReader.onload = dataRecieved;
fileReader.readAsBinaryString(file);
function dataRecieved() {
// Here we do a normal jquery ajax post with the file data (fileReader.result).
}
Wy的我们正与来自XMLHttpRequest的(或类似)可以更容易全面发布,从(它包裹在一个函数)网页的不同部分我们的Web服务的帮助手动和未发布的数据。但这似乎不成问题。
在Web服务中的代码看起来像这样
[WebMethod]
public string SaveFileValueFieldValue(string value)
{
System.Text.UnicodeEncoding encoder = new UnicodeEncoding();
byte[] bytes = encoder.GetBytes(value);
// Saves file from bytes here...
}
一切运作良好,数据似乎是正常的,但试图打开一个文件(图像为例)它不能被打开时。非常基本的文本文件似乎结果不错。但是,如果我上传一个像图像一样的“二进制”文件,然后在普通文本编辑器中将原始文件和上传版本打开为记事本,以查看有什么不同,那么只有少数“隐形”字符和某些东西似乎是错误的从一开始就显示一个新的几行字节。
基本上,该文件似乎只在编码转换的某个地方编码了几个字节。
我也尝试从数据中创建一个JavaScript数组中的int数组,然后再次转换为Web服务中的一个字节[],具有完全相同的问题。如果我试图用unicode(比如UTF-8)以外的其他东西进行转换,那么数据会与原始数据完全不同,所以我认为om在这里是正确的,但有些不对。
感谢您的帮助!随着你的帮助和这篇文章[这里](http://stackoverflow.com/questions/7431365/filereader-readasbinarystring-to-upload-files)我发现,它的工作。 =) – einord