为啥 JSZip 不能创建 blob 文件?

Posted

技术标签:

【中文标题】为啥 JSZip 不能创建 blob 文件?【英文标题】:Why JSZip can't create blob file?为什么 JSZip 不能创建 blob 文件? 【发布时间】:2019-10-28 05:59:39 【问题描述】:

我在 NodeJS 上尝试 JSZip 来创建一些 ZIP 文件,但我遇到了一个问题。

我正在使用 JSZip 提出的代码:

var JSZip = require('JSZip')
var zip = new JSZip()
zip.file("Hello.txt", "Hello World\n")
zip.generateAsync(type:"blob").then(function(content) 
    //do things here
);

当前代码在 generateAsync

上抛出错误

UnhandledPromiseRejectionWarning:错误:此平台不支持 blob

是否需要安装某些东西,或者我在 zip.file 中设置的数据应该是某种格式?

【问题讨论】:

Node.js can´t create Blobs?的可能重复 这个topic 在我的情况下似乎没有用,因为我不是在尝试创建 Blob,而是尝试从文件创建 ZIP。如果您能详细说明它对我的帮助:) 谢谢 在完全相同的问题上有一个github issue。它被错误地关闭了。 【参考方案1】:

JSZip 在jszip/lib/utils.js:352:15 处抛出此错误,因为support.blob 的值由jszip/lib/support.js 定义(第11 到32 行)。我不知道您的机器,但是在尝试在 NodeJS 中运行此脚本时,我已对其进行调试,得出的结论是 JSZip 检测到不支持 blob,因为未定义 self,因此 line 23 引发错误并且support.blob 设置为 false。

JSZip 似乎支持 Node 上的 Node Buffer 类型 - 以下不会在我的机器上引发任何错误:

// JSZip v3.2.1
// NodeJS v8.10.0
// Ubuntu 18.04
const JSZip = require('jszip');

const zip = new JSZip();
zip.file('hello.txt', 'Hello world\n');
zip
    .generateAsync(type: 'nodebuffer') // blob -> nodebuffer
    .then(console.log);

【讨论】:

nodebuffer 是的!!

以上是关于为啥 JSZip 不能创建 blob 文件?的主要内容,如果未能解决你的问题,请参考以下文章

JS创建ZIP文件,JSZip的使用

JS创建ZIP文件,JSZip的使用

使用 jsZip 将图像从 url 添加到 zip 文件

Egret 压缩与解压(jszip)

EUI加载 JSZip打包DragonBones二进制文件

为啥删除DOTA2国服安装目录下的“Package”文件夹,以及“ClientRegistry.blob”文件。还是进不去啊