我正在尝试将附件上传到通过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) })
我需要使用它来处理许多不同的mimeType,因此我没有在上面的代码中声明它。但是,我尝试为.doc文件声明contentType:’application / msword’,还尝试了processData:false和contentType:false。
数据将发布在应有的位置。但是,当我打开文件时,收到一条消息,提示mimeType:application / x-empty包含一个空文件或一个带有一堆二进制字符的文件。我试过.doc文件和pdf文件,两者的结果是相同的。
有人知道我可以进行哪些更改以使其工作吗?
只需将file引用作为数据发送(使用processData: false)至少对我有用:
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进行操作,这会破坏二进制数据:
如果data是字符串,则将编码设为UTF-8。 假设mime类型为“ text / plain; charset = UTF-8”。 让请求实体主体为将数据转换为Unicode并编码为UTF-8的数据。
如果data是字符串,则将编码设为UTF-8。
假设mime类型为“ text / plain; charset = UTF-8”。
让请求实体主体为将数据转换为Unicode并编码为UTF-8的数据。
发送file参考(blob)将执行以下操作:
blob
如果data是Blob如果对象的type属性不是空字符串,则将mime type作为其值。 令请求实体主体为data表示的原始数据。
如果data是Blob如果对象的type属性不是空字符串,则将mime type作为其值。
令请求实体主体为data表示的原始数据。