javascript将二进制数据发送到web服务

javascript将二进制数据发送到web服务,javascript,web-services,html,filereader,Javascript,Web Services,Html,Filereader,在工作中,我们试图在浏览器端使用HTML5/javascript,在web服务中使用C#将文件从网页上传到web服务。但是在某种编码上有一些麻烦 至于javascript,我们在文件阅读器的帮助下获取文件的二进制数据 var file = ... // gets the file from an input var fileReader = new FileReader(); fileReader.onload = dataRecieved; fileReader.readAsBinaryStr

在工作中,我们试图在浏览器端使用HTML5/javascript,在web服务中使用C#将文件从网页上传到web服务。但是在某种编码上有一些麻烦

至于javascript,我们在文件阅读器的帮助下获取文件的二进制数据

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服务中再次转换为byte[],问题与此完全相同。如果我尝试使用unicode以外的任何东西(如UTF-8)进行转换,结果显示数据与原始数据完全不同,因此我认为om在这里是正确的,但有点错误。

请求本身是文本,因此如果发送错误的enc类型,二进制数据将丢失。 您可以做的是将二进制编码为base64,然后在另一端对其进行解码。

要将enc类型更改为多部分/混合并设置边界(就像电子邮件或其他东西),您必须自己组装请求。

谢谢您的帮助!在你的帮助和我找到的另一篇文章的帮助下,它成功了