我正在尝试将通过附件API上传到HTML文件的附件上传到Web页面。 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文件,两者的结果是相同的。

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

最佳答案

只需将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,并将其编码为utt-8的specified格式,这会破坏二进制数据:



发送file引用(blob)将执行以下操作:

07-28 02:19
查看更多