无法在 OSx 上解压缩节点归档器生成的文件
Can't unzip file generated by node-archiver on OSx
我正在根据 JSON 数据生成一个压缩文件。目前,当我生成 TAR 文件时,我的 API 工作正常。这是我的代码:
app.post('/', (req, res) => {
const filename = 'export.tar';
const archive = archiver('tar', {});
archive.on('warning', (err) => {
console.log(`WARN -> ${err}`);
});
archive.on('error', (err) => {
console.log(`ERROR -> ${err}`);
});
const files = req.body.files || [];
for (const file of files) {
archive.append(file.content, { name: file.name });
console.log(`Appending ${file.name} file: ${JSON.stringify(file, null, 2)}`);
}
try {
if (files.length > 0) {
archive.pipe(res);
archive.finalize();
return res.attachment(filename);
} else {
return res.send({ error: 'No files to be downloaded' });
}
} catch (e) {
return res.send({ error: e.toString() });
}
});
这是一些示例 JSON 我通过了:
{
"title": "Sample Title",
"files": [
{
"name": "index.html",
"content": "<p>Hello, World!</p>"
},
{
"name": "README.md",
"content": "# Hello, World!"
}
]
}
但是,当我更改它以生成一个 ZIP 文件时,我收到类似 21 "Is a directory" 或 2 "No such file or directory."
的错误
我改的代码是:
const filename = 'export.zip';
const archive = archiver('zip', {
zlib: { level: 9 },
});
我尝试查看其他问题和问题,但在制作 store: true
或移动 finalize()
或制作 forceZip64: true
时没有任何运气。我可以更改什么以使 ZIP 文件正常工作?
成功了!通过使用 createWriteStream
创建输出,然后将存档传输到该输出,我们能够下载一个完美运行的 zip。
app.post('/', (req, res) => {
const filename = 'export.zip';
const archive = archiver('zip', {});
let output = fs.createWriteStream(filename);
archive.on('warning', err => {
console.log(`WARN -> ${err}`);
});
archive.on('error', err => {
console.log(`ERROR -> ${err}`);
});
output.on('end', function() {
console.log('Data has been drained');
});
archive.pipe(output);
const files = req.body.files || [];
for (const file of files) {
archive.append(file.content, { name: file.name });
console.log(`Appending ${file.name} file: ${JSON.stringify(file, null, 2)}`);
}
try {
if (files.length > 0) {
archive.finalize();
res.download(filename);
} else {
return res.send({ error: 'No files to be downloaded' });
}
} catch (e) {
return res.send({ error: e.toString() });
}
});
我正在根据 JSON 数据生成一个压缩文件。目前,当我生成 TAR 文件时,我的 API 工作正常。这是我的代码:
app.post('/', (req, res) => {
const filename = 'export.tar';
const archive = archiver('tar', {});
archive.on('warning', (err) => {
console.log(`WARN -> ${err}`);
});
archive.on('error', (err) => {
console.log(`ERROR -> ${err}`);
});
const files = req.body.files || [];
for (const file of files) {
archive.append(file.content, { name: file.name });
console.log(`Appending ${file.name} file: ${JSON.stringify(file, null, 2)}`);
}
try {
if (files.length > 0) {
archive.pipe(res);
archive.finalize();
return res.attachment(filename);
} else {
return res.send({ error: 'No files to be downloaded' });
}
} catch (e) {
return res.send({ error: e.toString() });
}
});
这是一些示例 JSON 我通过了:
{
"title": "Sample Title",
"files": [
{
"name": "index.html",
"content": "<p>Hello, World!</p>"
},
{
"name": "README.md",
"content": "# Hello, World!"
}
]
}
但是,当我更改它以生成一个 ZIP 文件时,我收到类似 21 "Is a directory" 或 2 "No such file or directory."
的错误我改的代码是:
const filename = 'export.zip';
const archive = archiver('zip', {
zlib: { level: 9 },
});
我尝试查看其他问题和问题,但在制作 store: true
或移动 finalize()
或制作 forceZip64: true
时没有任何运气。我可以更改什么以使 ZIP 文件正常工作?
成功了!通过使用 createWriteStream
创建输出,然后将存档传输到该输出,我们能够下载一个完美运行的 zip。
app.post('/', (req, res) => {
const filename = 'export.zip';
const archive = archiver('zip', {});
let output = fs.createWriteStream(filename);
archive.on('warning', err => {
console.log(`WARN -> ${err}`);
});
archive.on('error', err => {
console.log(`ERROR -> ${err}`);
});
output.on('end', function() {
console.log('Data has been drained');
});
archive.pipe(output);
const files = req.body.files || [];
for (const file of files) {
archive.append(file.content, { name: file.name });
console.log(`Appending ${file.name} file: ${JSON.stringify(file, null, 2)}`);
}
try {
if (files.length > 0) {
archive.finalize();
res.download(filename);
} else {
return res.send({ error: 'No files to be downloaded' });
}
} catch (e) {
return res.send({ error: e.toString() });
}
});