将所有csv文件放入Javascript的zip文件中



我试图通过使用JsZip和FileSaver库制作zip文件。我使用的是NestJs,这是NodeJs框架。但我有个问题。每次我尝试使用文档JSzip Doc中的代码时,我都会得到一个blob错误,上面写着"error: blob is not supported by this platform"。我正在使用节点版本16。

我有两个方法,其中一个是读取目录中的文件,过滤并返回它们,另一个是在数组中调用该方法,应该生成zip文件。

这个方法读取tmp目录下的所有文件。

async readAllFilesInDirectory() {
const userHomeDir = os.homedir();
const tmpDir = path.resolve(userHomeDir, '..', '../tmp');
console.log(tmpDir);
try {
const files = await fs.promises.readdir(tmpDir);
// console.log(files);
return files.filter((file) => {
return !(
file.startsWith('systemd') ||
file.startsWith('.') ||
file.startsWith('snap') ||
file.startsWith('ssh') ||
file.startsWith('tracker') ||
file.startsWith('vscode')
);
});
} catch (e) {
// console.log(e);
return [];
}
}

这个函数应该把目录下的所有文件压缩成一个zip文件,但是它不起作用。

async zipFiles() {
const allFiles = await this.readAllFilesInDirectory();
console.log(allFiles);
var zip = new JSZip();
zip.generateAsync({ type: 'blob' }).then(function (content) {
// see FileSaver.js
FileSaver.saveAs(content, 'test.zip');
});
}

给出的错误是:错误:此平台不支持blob

根据JSZip的文档,您应该使用zip.generateNodeStream({ type: 'nodebuffer', streamFiles: true })来生成zip而不是使用blob,您应该使用fs模块的fs.createWriteStreamAPI来将zip文件写入磁盘。你的代码应该是这样的:

async zipFiles() {
const allFiles = await this.readAllFilesInDirectory();
console.log(allFiles);
var zip = new JSZip();
zip.generateNodeStream({ type: 'nodebuffer', streamFiles: true })
.pipe(fs.createWriteStream('test.zip'))
.on('finish', () => console.log('test.zip written'));
}

最新更新