小编典典

通过AJAX发布将文件输入作为FileReader二进制数据发布

ajax

我正在尝试将附件上传到通过rest API输入到网页的HTML文件中。API文档指出,该帖子是HTTP请求正文的纯二进制内容,而不是表单文件上载。

我的代码如下:

$('#_testButton').bind('click', function () {
    var file = document.getElementById('_testFile').files[0]
    var reader = new FileReader();
    reader.onload = function () {
        $.ajax({
            url: '/attachmentURL',
            type: 'POST',
            data: reader.result
        })
    }
    reader.readAsBinaryString(file)
})

我需要使用它来处理许多不同的mimeType,因此我没有在上面的代码中声明它。但是,我尝试为.doc文件声明contentType:’application
/ msword’,还尝试了processData:false和contentType:false。

数据将发布在应有的位置。但是,当我打开文件时,收到一条消息,提示mimeType:application /
x-empty包含一个空文件或一个带有一堆二进制字符的文件。我试过.doc文件和pdf文件,两者的结果是相同的。

有人知道我可以进行哪些更改以使其工作吗?


阅读 294

收藏
2020-07-26

共1个答案

小编典典

只需将file引用作为数据发送(使用processData: false)至少对我有用:

$('#_testButton').bind('click', function () {
    var file = document.getElementById('_testFile').files[0];

    $.ajax({
        url: "/attachmentURL",
        type: "POST",
        data: file,
        processData: false
    });
});

它在这里描述:https
:
//developer.mozilla.org/en/DOM/XMLHttpRequest/Sending_and_Receiving_Binary_Data#section_3

发送字符串(即使该字符串表示二进制数据)也不起作用,因为浏览器会强制将其转换为unicode并按照指定的编码为utf-8进行操作,这会破坏二进制数据:

如果data是字符串,则将编码设为UTF-8。

假设mime类型为“ text / plain; charset = UTF-8”。

让请求实体主体为将数据转换为Unicode并编码为UTF-8的数据。

发送file参考(blob)将执行以下操作:

如果data是Blob如果对象的type属性不是空字符串,则将mime type作为其值。

令请求实体主体为data表示的原始数据。

2020-07-26