我喜欢使用dropzone.js将文件上传到类似REST的服务器。虽然dropzone.js可以将请求方法切换到PUT
,但它仍然会发送类似mulitpart文件上传的内容。我的服务器期望原始数据作为单个资源PUT
方法的主体,因此上传的文件将包含多部分分隔符。
如何告诉dropzone.js将原始数据放入请求正文中,不能再少了?
答案 0 :(得分:1)
请参考我写的这个答案:https://stackoverflow.com/a/38734015/3746828
添加以下选项,然后工作。
myDropzone.options.sending = function(file, xhr) {
var _send = xhr.send;
xhr.send = function() {
_send.call(xhr, file);
}
}
答案 1 :(得分:0)
下面是另一种使用作为选项传入 Dropzone 的 params 函数修补 xhr 的方法。此方法也适用于分块文件。下面的分块执行路径还添加了使用 OneDrive API 上传可恢复文件所需的标头,如下所述:https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_createuploadsession?view=odsp-graph-online
const CHUNK_SIZE=10485760 //10MiB
Dropzone.options.dropzone = {
method: "put",
headers: {
'Cache-Control': null,
'X-Requested-With': null
},
filesizeBase: 1024,
maxFilesize: 102400, // 100G in MB, max onedrive filesize
chunking: true,
chunkSize: CHUNK_SIZE,
params: function(files, xhr, chunk) {
if (chunk) {
const chunk_start = (chunk.index * CHUNK_SIZE)
xhr.setRequestHeader('Content-Range',
'bytes ' + chunk_start
+ '-' + (chunk_start + chunk.dataBlock.data.size - 1)
+ '/' + files[0].size)
var _send = xhr.send
xhr.send = function() {
_send.call(xhr, chunk.dataBlock.data)
}
} else {
var _send = xhr.send
xhr.send = function() {
_send.call(xhr, files[0])
}
}
}
}