【发布时间】:2022-02-17 23:52:09
【问题描述】:
大家,
我在 Node.js 中编写了一个 lambda,它获取一个文件夹并压缩其内容。 为此,我使用了 Archiver 库:Archiver
以下是我创建文件的代码:
const zipFilePath = '/tmp/' + 'filename' + '.zip'
const output = fs.createWriteStream(zipFilePath);
const archive = archiver('zip', {
zlib: { level: 9 }
});
output.on('close', function () {
console.log(archive.pointer() + ' total bytes');
console.log('archiver has been finalized and the output file descriptor has closed.');
});
archive.on('error', function(err){
throw err;
});
await archive.pipe(output);
await archive.directory(destFolder, false);
await archive.finalize();
要写入文件,我使用 lambdas 的 /tmp 文件夹,这是唯一具有写入权限的文件夹。
流程如下:
- 我得到了文件夹的路径
- 压缩内容并将其保存在文件夹destFolder中
然后将文件保存在 S3 存储桶中:
const file = await fs.readFileSync(filePath)
const params = {
Bucket: bucketName,
Key: fileName,
Body: file
};
const res = await s3.upload(params).promise()
return res.Location
生成了zip文件,问题是当我下载它时,它已损坏。我尝试使用在线 zip 文件分析器 (this) 对其进行分析,分析结果如下:
Type = zip
ERRORS:
Unexpected end of archive
WARNINGS:
There are data after the end of archive
Physical Size = 118916
Tail Size = 19
Characteristics = Local
分析器显示文件都存在于 .zip 中(我可以看到它们的名称)。
最奇怪的是,如果不是 .zip 文件(同样使用相同的库)我在 .tar 中创建它
const archive = archiver('tar', {
zlib: { level: 9 }
});
文件已正确生成,我可以将其解压缩为存档。基本上,就好像 .zip 格式本身有问题。
有没有人经历过类似的情节?你能帮我找到解决办法吗?我需要以 .zip 格式创建文件。 谢谢。
【问题讨论】:
标签: node.js amazon-web-services amazon-s3 aws-lambda zip