让dropzone.js做一个原始上传

时间:2015-11-06 18:01:37

标签: rest dropzone.js

我喜欢使用dropzone.js将文件上传到类似REST的服务器。虽然dropzone.js可以将请求方法切换到PUT,但它仍然会发送类似mulitpart文件上传的内容。我的服务器期望原始数据作为单个资源PUT方法的主体,因此上传的文件将包含多部分分隔符。

如何告诉dropzone.js将原始数据放入请求正文中,不能再少了?

2 个答案:

答案 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])
            }
        }
    }
}