Я пишу приложение для загрузки набора файлов изображений, упакованных в zip-архив.
Фронтенд - это приложение реакции, вызов POST дает бэкэнду список файлов. Затем бэкэнд возвращает почтовый индекс, содержащий файлы.
Вот код переднего конца:
onClickDownload = async () => {
const {markedFileList} = this.state;
let payload = {
value: markedFileList,
};
const options = {
method: 'POST',
headers: {
'accept': 'application/json',
'content-type': 'application/x-www-form-urlencoded'
},
data: JSON.stringify(payload),
url: `http://` + getHostAndPort() + `/rest/photo/toZip`,
};
axios(options).then(result => {
this.downloadBlob(result.data, "file.zip", "application/zip");
});
}
Со стороны сервера, метод "toZip" реализован, как описано в последнем сообщении этой темы: Spring REST - создайте файл .zip и отправьте его клиенту
Я пытался поместить контент в разметку и смоделировать щелчок по нему. Я получаю zip-файл «file.zip», содержащий один файл с именем «file», который не читается, даже если извлечен и переименован в file2.zip
file.zip
|
--file
downloadBlob(data, filename, type) {
var file = new Blob([data], {type: type});
if (window.navigator.msSaveOrOpenBlob) // IE10+
window.navigator.msSaveOrOpenBlob(file, filename);
else { // Others
var a = document.createElement("a"),
url = URL.createObjectURL(file);
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
setTimeout(function() {
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}, 0);
}
}
Я видел FileSavec lib: https://github.com/eligrey/FileSaver.js
Проблема: я хочу предоставить zip-файл с изображением, размер которого может превышать 500 МБ, что является пределом библиотеки. Я нашел пример, но не адаптированный для> 1 ГБ файла Как сохранить двоичные данные ZIP-файла в Javascript?
Я также пытался использовать нативный интерфейс fs
https://disjoint.ca/til/2017/09/20/how-to-download-a-binary-file-using-axios/
но это для операций на стороне сервера по Дану: https://github.com/facebook/create-react-app/issues/3988
Я не хочу генерировать zip на серверной части, хранить его и обслуживать через определенный URL, потому что я не хочу управлять очисткой zip после загрузки.
Есть ли простой способ просто взять байтовый массив и просто попросить клиента сохранить его?
Большое спасибо за помощь
С уважением,
user7245912