Как реализовать jszip в Reaction.js - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь сжать список файлов перед отправкой через http-запрос.Но я застрял здесь.

export default function zipTargetFiles(files) {
    if (files.length <= 1) {
        return files;
    } else {
        const zip = require('jszip')();
        for (let i = 0; i < files.length; i++) {
            zip.file(files[i].name, files[i]);
    }
    return zip.generateAsync({type:"blob"});
}

}

По сути, функция берет список файлов и пытается сжать их в один файл .zip.Но когда я отправлял его как сформированные данные, он выдавал ошибку, что представленные данные не были файлом.

Я проверил полезную нагрузку в заголовке, и поле назначения было равно [object Promise].Как мне действительно вернуть .zip-файл?

Теперь я могу перехватить zip-файл в Redux-saga, но он не дает расширения, когда я сохраняю его в своей базе данных, вместо этого он дает толькоимя как «капля».

saga.js

const file = yield call(zipTargetFiles, files);
const formData = new FormData();
formData.append("coversheet", file);
const reponse = yield call(apiRequest, formData);

1 Ответ

0 голосов
/ 19 октября 2018

Происходит то, что .generateAsync возвращает обещание.Вам придется подождать, пока обещание будет выполнено или отклонено, прежде чем вы сможете работать с данными.

Обещания - это основная концепция в JS при работе с асинхронными операциями.Вы можете прочитать больше об обещаниях здесь

import zipTargetFiles from '/path'

zipTargetFiles( data ).then(file => {
 // Access your file here
})
...