通过AJAX Post将文件输入发布为FileReader二进制数据
我试图通过rest API发布上传到HTML文件输入到网页的附件。 API文档指出post是直接二进制内容作为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) })
我需要这个来处理许多不同的mimeTypes,所以我没有在上面的代码中声明它。 但是,我尝试为.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并按指定编码为utf-8,这会破坏二进制数据:
如果数据是字符串,则编码为UTF-8。
让mime类型为“text / plain; charset = UTF-8”。
让请求实体主体转换为Unicode并编码为UTF-8。
发送file
引用( blob
)将执行此操作:
如果数据是Blob如果对象的type属性不是空字符串,则让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); } }); });