【发布时间】:2020-07-16 02:58:05
【问题描述】:
我通过 AJAX 向 Ruby 发送一个文件对象,如下所示:
var files = $("#upDOCS").prop('files'),
formData = new FormData();
for (var i = 0; i < files.length; i++) {
var file = files[i];
if (!file.type==='application/pdf') {
continue;
}
formData.append(file.name, file);
}
$.ajax({
xhr: function () {
var xhr = $.ajaxSettings.xhr();
xhr.upload.onprogress = function (e) {
console.log(Math.floor(e.loaded / e.total * 100) + '%');
};
return xhr;
},
url: "medcon/adddocs",
type: "POST",
enctype: 'multipart/form-data',
data: formData,
cache: false,
contentType: false,
processData: false,
success: function (locks) { ...
但我收到一条错误消息,提示我正在发送一个以破折号开头的意外令牌 ----- 在我看来,我已经获得了 pdf 文件对象,因为该错误还包括 PDF 数据:
746: unexpected token at '------WebKitFormBoundarybp8j3mTAsTL4JrAq
Content-Disposition: form-data; name="test.pdf"; filename="test.pdf"
Content-Type: application/pdf
%PDF-1.4
%����
1 0 obj
<</Creator (Mozilla/5.0 \(Windows NT 10.0; Win64; x64\) AppleWebKit/537.36 \(KHTML, like Gecko\) Chrome/70.0.3538.110 Safari/537.36)
/Producer (Skia/PDF m70)
/CreationDate (D:20181130205113+00'00')
/ModDate (D:20181130205113+00'00')>>
endobj
2 0 obj
<</Type /XObject
/Subtype /Image
/Width 17
/Height 17
/ColorSpace /DeviceRGB
/SMask 3 0 R
/BitsPerComponent 8
/Filter /FlateDecode
/Length 144>> stream
x���I� ��S�7�M�'9eʈ���'�i3�1�d;��ӫ��9�;�h��X�����8��uV????�p����b�?���4ӵ�/����0䵍�����Z+?P���(C���@gjޏ~�f������?v��N
endstream
endobj
3 0 obj
<</Type /XObject
/Subtype /Image
/Width 17
/Height 17
/ColorSpace /DeviceGray
/BitsPerComponent 8
/Filter /FlateDecode
/Length 121>> stream
x�c`'
我哪里错了?我引入了哪些非法令牌或遗漏了哪些格式?
【问题讨论】:
-
我在构造函数中缺少表单实例,var formData =
new FormData($("#upDOCS")).get(0)); -
检查此示例以使用 ajax 正确发送 pdf 文件:stackoverflow.com/questions/28207106/pdf-file-upload-ajax-html
标签: javascript jquery ajax file-upload multipartform-data