Скачайте zip-файл в reactjs без каких-либо плагинов - PullRequest
0 голосов
/ 18 февраля 2020

Я получаю ответ от остальных API, чей Content-Type равен text/html, а Content-Encoding равен gzip.

Я пытался загрузить его с помощью BLOB-объекта

const blob = new Blob([res], { type: 'application/gzip' });
const downloadUrl = URL.createObjectURL(blob);
const a = document.createElement('a'); 
a.href = downloadUrl;
document.body.appendChild(a);
a.click();

Но загруженный файл gz не удалось открыть (кажется, поврежден). Может ли кто-нибудь помочь мне с загрузкой zip-файла в reactjs.

Редактировать: требуется решение без использования внешних плагинов

1 Ответ

1 голос
/ 18 февраля 2020

Вы можете использовать jszip npm модуль.

Например:

var zip = new JSZip();

zip.file("Hello.txt", "Hello World\n");
var img = zip.folder("images"); //images is the folder which will be zip

img.file("smile.gif", imgData, {base64: true});

zip.generateAsync({type:"blob"}).then(function(content) {

    saveAs(content, "example.zip");
});

Чтобы использовать его без jszip, вы можете попробовать следующий код:

function str2bytes (str) {
    var bytes = new Uint8Array(str.length);
    for (var i=0; i<str.length; i++) {
        bytes[i] = str.charCodeAt(i);
    }
    return bytes;
}

и его использование:

var blob = new Blob([str2bytes(myData)], {type: "application/zip"});
saveAs(blob, "data.zip"); 

Но jszip - лучший альтернативный подход.

...