Eri*_* H. 26 ajax rest jquery filereader
我试图通过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)
})
Run Code Online (Sandbox Code Playgroud)
我需要这个来处理许多不同的mimeTypes,所以我没有在上面的代码中声明它.但是,我尝试为.doc文件声明contentType:'application/msword',并尝试使用processData:false和contentType:false.
数据将被发布到应有的位置.但是,当我打开文件时,我收到一条消息,上面写着mimeType:带有空文件的application/x-empty或带有一堆二进制字符的文件.我已经尝试过.doc文件和pdf文件,两者的结果是一样的.
有没有人知道我可以改变什么使这项工作?
Esa*_*ija 34
简单地将file参考作为数据发送(带processData: false)至少为我完成了这项工作:
$('#_testButton').bind('click', function () {
var file = document.getElementById('_testFile').files[0];
$.ajax({
url: "/attachmentURL",
type: "POST",
data: file,
processData: false
});
});
Run Code Online (Sandbox Code Playgroud)
这里描述:https://developer.mozilla.org/en/DOM/XMLHttpRequest/Sending_and_Receiving_Binary_Data#section_3
发送字符串(即使该字符串表示二进制数据)也不起作用,因为浏览器会强制将其转换为unicode并按指定编码为utf-8,这将破坏二进制数据:
如果数据是字符串,则编码为UTF-8.
让mime类型为"text/plain; charset = UTF-8".
让请求实体主体转换为Unicode并编码为UTF-8.
发送file引用(blob)将执行此操作:
如果数据是Blob如果对象的type属性不是空字符串,则让mime类型为其值.
让请求实体主体是数据表示的原始数据.