首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在react.js中实现jszip

如何在react.js中实现jszip
EN

Stack Overflow用户
提问于 2018-10-19 05:15:58
回答 2查看 5.2K关注 0票数 5

在通过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文件?

现在我可以在Redux-saga中捕获zip文件了,但是当我将它保存到数据库中时,它没有给出扩展名,而是只给出了'blob‘的名称。

saga.js

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-19 05:42:17

发生的事情是,.generateAsync正在返回一个承诺。您必须等到承诺实现或被拒绝后才能使用数据。

当使用异步操作时,Promises是JS中的核心概念。您可以阅读有关promises here的更多信息

import zipTargetFiles from '/path'

zipTargetFiles( data ).then(file => {
 // Access your file here
})
票数 2
EN

Stack Overflow用户

发布于 2020-04-02 22:08:26

要下载并命名.zip文件夹,您需要使用file-saver中的saveAs()

import { saveAs } from "file-saver";

  zip
    .generateAsync({
      type: "blob"
    })
    .then(content => {
      saveAs(content, "fileName.zip");
    });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52882703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档