Jquery 通过AJAX Post将文件输入作为FileReader二进制数据发布
我正试图通过RESTAPI将上传到HTML文件输入到网页的附件发布。API文档声明post是作为HTTP请求主体的直接二进制内容,而不是表单文件上载 我的代码如下:Jquery 通过AJAX Post将文件输入作为FileReader二进制数据发布,jquery,ajax,rest,filereader,Jquery,Ajax,Rest,Filereader,我正试图通过RESTAPI将上传到HTML文件输入到网页的附件发布。API文档声明post是作为HTTP请求主体的直接二进制内容,而不是表单文件上载 我的代码如下: $('#_testButton').bind('click', function () { var file = document.getElementById('_testFile').files[0] var reader = new FileReader(); reader.onload = funct
$('#_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文件,结果都是一样的
有人知道我可以改变什么来实现这一点吗?只需将
文件
引用作为数据发送(使用processData:false
)至少为我完成了以下任务:
$('#_testButton').bind('click', function () {
var file = document.getElementById('_testFile').files[0];
$.ajax({
url: "/attachmentURL",
type: "POST",
data: file,
processData: false
});
});
这里描述的是:
发送字符串(即使该字符串表示二进制数据)将不起作用,因为浏览器将强制将其转换为unicode并编码为utf-8,这将损坏二进制数据:
如果数据是字符串,则编码为UTF-8
让mime类型为“text/plain;charset=UTF-8”
将请求实体体数据转换为Unicode并进行编码
作为UTF-8
发送文件
引用(blob
)将执行以下操作:
如果对象的type属性不是空的,则数据是Blob
字符串让mime类型作为其值
让请求实体主体是由数据表示的原始数据
var文件
$('#_testFile').on("change", function (e) {
file = e.target.files[0];
});
$('#_testButton').click(function () {
var serverUrl = '/attachmentURL';
$.ajax({
type: "POST",
beforeSend: function (request) {
request.setRequestHeader("Content-Type", file.type);
},
url: serverUrl,
data: file,
processData: false,
contentType: false,
success: function (data) {
console.log("File available at: ", data);
},
error: function (data) {
var obj = jQuery.parseJSON(data);
alert(obj.error);
}
});
});
-1:OP说,服务器想要的是直接的二进制内容,而不是包含在表单数据中的内容。@EricH。我会仔细研究一下,想出一个解决办法。我只是误解了你的意图。伊莎莉亚:哈哈,看来你把它当作你的社交网络了@埃里克。你做这件事的方式,在我看来很好;除非服务器正在寻找其他内容。@strusthmaster,否则它现在应该直接将二进制数据作为POST数据发送。也测试过了P@Esailija-1撤回,和+1.)这是客户端的脚本!jQuery