#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, подключиться обратно и посмотреть, работает ли он. Я не вижу всех фрагментов файла, отправленных на внутренний сервер. Я знаю, что мой код работает неправильно, но не могу понять. Как я могу заставить свой код работать?