我正在尝试将通过附件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
)将执行以下操作: