【问题标题】:javascript sendfile binary data to web servicejavascript将二进制数据发送到Web服务
【发布时间】:2012-09-10 20:25:00
【问题描述】:

在工作中,我们正在尝试使用浏览器端的 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 Service 中的代码如下所示

[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 在这里是正确的,但有些地方有点错误。

【问题讨论】:

    标签: javascript web-services html filereader


    【解决方案1】:

    请求本身是文本,因此如果您发送错误的编码类型,二进制数据会丢失。 您可以做的是将二进制编码为 base64 并在另一端对其进行解码。
    要将 enc-type 更改为 multi-part/mixed 并设置边界(就像电子邮件或其他东西一样),您必须自己组装请求。

    【讨论】:

    • 感谢您的帮助!在您的帮助和我发现的其他帖子here 下,它奏效了。 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多