Как отправить большой архивный файл в виде фрагментов и повторить » x » раз, если произойдет сбой

#javascript #axios #multipartform-data #axios-retry

Вопрос:

У меня есть большой архивный файл, который мне нужно отправить на мой сервер из приложения vue. Я разрезаю файл на куски по 10 МБ и отправляю его с помощью axios . Я также хочу повторно отправить любой фрагмент, который не был отправлен (скажем, из-за сетевой ошибки). axios-retry Для этого я использую пакет. Вот мой код:

 axiosRetry(axios, { retryCondition: (rc) => {
    console.log(64, 'retrying --- ', rc);
  }, retries: 3 });


jszip.generateAsync({ type: 'blob' })
        .then((myzipfile) => {
          // chunking zipped file
          const chunk_size = 10000000;
          const file_size = myzipfile.size;
          let start = 0;
          let next_slice = start   chunk_size;
          let c = 1;
          let each_slice;
          while(start < file_size) {
            if (next_slice > file_size) {
              //next_slice = file_size;
              console.log(269, 'GREATER!!!!!', next_slice - file_size);
              each_slice = myzipfile.slice(start, file_size   1 , 'Blob');
            } else {
              each_slice = myzipfile.slice(start, next_slice , 'Blob');
            }
            const formData = new FormData();
            formData.append('file', each_slice, `p1.zip.00${c}`);
            formData.append('auth_token', `${TOKEN}`);
            formData.append('expires', `${expiryMinutes}`);

            const config1 = {
              onUploadProgress: function(progressEvent) {
                this.percentCompleted = parseInt(Math.round( (progressEvent.loaded * 100) / progressEvent.total ));
              }.bind(this),
              'Content-Type': 'multipart/form-data',
              timeout: 420000
            };
            axios.post(`${config.backendServer}/submit`, formData, config1).then((res) => {
              this.hasData = true;
              this.isUploading = false;
              console.log(262, c,  'SUCCESS!!', `p1.zip.00${c}`, res.status);
              // this.$emit('valueChanged', { status: res.status });
            })
            .catch((e) => {
              console.log(256, `p1.zip.00${c}`, e);
              if(e.code amp;amp; e.code === 'ECONNABORTED') {
                this.timeout = true;
                this.showProgressBar = false;
              }
            });
            c = c 1;
            start = next_slice;
            next_slice = start   chunk_size;
          }
        });
 

Я пытаюсь отключить Wi-Fi, подключиться обратно и посмотреть, работает ли он. Я не вижу всех фрагментов файла, отправленных на внутренний сервер. Я знаю, что мой код работает неправильно, но не могу понять. Как я могу заставить свой код работать?