Передайте данные загрузки в строку запроса вместо тела запроса, Dropzone. js? - PullRequest
0 голосов
/ 14 апреля 2020

Я использую 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..), затем параметры обрабатываются. Но до сих пор не знаю, как это решить.

...