javascript sendfile 二进制数据到 Web 服务

标签 javascript web-services html filereader

在工作中,我们尝试在浏览器端使用 html 5/javascript 并在 Web 服务中使用 C# 将文件从网页上传到 Web 服务。但在某种编码方面遇到了一些麻烦。

对于 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).
}

我们手动发布数据而不是借助 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-type,二进制数据就会丢失。 您可以做的是将二进制编码为 Base64 并在另一端对其进行解码。
要将 enc-type 更改为多部分/混合并设置边界(就像电子邮件或其他内容),您必须自己组装请求。

关于javascript sendfile 二进制数据到 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12479273/

相关文章:

javascript - 将存储在 Ruby 变量中的 HTML block 存储在 javascript var 中

javascript - 在 Angular 中使用下划线在数组中查找内容

java - NetBeans Web 服务客户端 stub - 类型不兼容?

javascript - Jquery 更改 Div 边框颜色失败

html - 在不失去点击下方元素的能力的情况下将一个元素显示在另一个元素之上

javascript - 如何从 Paper.js 的图层中销毁特定(而不是删除)对象/路径/子组

javascript - 无法读取 Angular js中的属性

java - 尝试从 Java 中的 Web 服务获取数据

c# - 从 Proxy 类方法调用中查看 SOAP 请求

html - 如果背景图片存在则插入 div