Я использую Dropzone. js с Vue. js с включенным чанкингом. Вместо того, чтобы передавать параметры чанка в тело запроса, я хочу отправить их в строке запроса. Что я пробовал:
Начальная Dropzone. js Опции:
{
url: `.../upload`,
...
chunking: true,
params: this.setUploadParams
}
setUploadParams
:
setUploadParams(files, xhr, chunk) {
if (chunk) {
this.uploadParams = {
dzuuid: chunk.file.upload.uuid,
dzchunkindex: chunk.index,
dztotalfilesize: chunk.file.size,
dzchunksize: this.dropzoneOptions.chunkSize,
dztotalchunkcount: chunk.file.upload.totalChunkCount,
dzchunkbyteoffset: chunk.index * this.dropzoneOptions.chunkSize
};
let querystring = Object.entries(this.uploadParams)
.map(([key, value]) => `${key}=${value}`)
.join("&");
let url = `.../upload?${querystring}`;
this.$refs.dropzone.dropzone.options.url = url;
}
},
Где dropzoneOptions
- вышеупомянутые опции, а this.$refs.dropzone
относится к моему Dropzone. js компоненту в DOM:
<vue2Dropzone
ref="dropzone"
id="dropzone"
:options="dropzoneOptions"
></vue2Dropzone>
Поле url
в options
фактически обновляется, но исходный URL (без строки запроса) фактически отправляется, есть идеи, почему? и заранее спасибо.
Обновление :
На самом деле теперь я знаю проблему, в Dropzone. js выполняется следующее:
let url = this.resolveOption(this.options.url, files);
xhr.open(method, url, true);
...
if (this.options.params) {
let additionalParams = this.options.params;
if (typeof additionalParams === 'function') {
additionalParams = additionalParams.call(this, files, xhr, files[0].upload.chunked ? this._getChunk(files[0], xhr) : null);
}
...
}
Как видите, xhr сначала инициализируется xhr.open(url..)
, затем параметры обрабатываются. Но до сих пор не знаю, как это решить.