node.js - 通过从流中添加文件来创建 .zip 存档
问题描述
我的任务是通过单击“下载包”按钮来创建和下载 .zip 存档。文件位于 aws.s3 上。从数据库中使用fileId
我得到它的路径。然后我调用“downloadBundle”来获取readStream
和fileInfo
.
public downloadBundle(data: IBundleDownload): Promise<any> {
return this.hasuraGraphqlApi.getObjectProjectComponent(data.projectComponent.id).then(projectComponent => {
const fileRemotePaths: Array<string> = projectComponent.files
.filter(({ type }) => type === data.projectComponent.fileType)
.map(({ file }) => file.remotePath);
const params: aws.S3.Types.HeadObjectRequest = {
Bucket: s3Bucket,
Key: fileRemotePaths[0],
};
return s3.headObject(params).promise()
.then(data => ({
fileInfo: data,
readStream: s3.getObject(params).createReadStream(),
}))
.catch(error => {
throw new StorageError(error);
});
});
}
以下函数返回文件,但我需要修改它以创建一个包含文件的 zip 存档。
public downloadBundle(data: IBundleDownload, res: express.Response): Promise<void> {
return storageService.downloadBundle(data).then(result => {
const { readStream, fileInfo }: IDownloadResponse = result;
return new Promise((resolve, reject) => {
readStream.on('error', error => {
reject(new StorageError(error));
});
readStream.on('end', () => {
resolve();
});
res.set('Content-Type', fileInfo.ContentType);
res.set('Content-Length', fileInfo.ContentLength.toString());
res.set('Last-Modified', fileInfo.LastModified.toString());
res.set('Content-Disposition', `inline; filename="${fileInfo.Metadata.originalname}"`);
res.set('Cache-Control', 'public, max-age=31557600');
res.set('ETag', fileInfo.ETag);
readStream.pipe(res);
})
});
}
由于我没有实践过实现此类功能,因此我不知道如何在这里使用 node.js 存档器。在此先感谢您的任何建议。
解决方案
推荐阅读
- google-chrome - 如何获得 chrome 实验性暗模式 css?
- slurm - 由于 RealMemory 不足,SLURM 停止启动并且节点处于“IDLE+DRAINED”状态
- excel - 公式语法(使用条件计算唯一值)
- elasticsearch - 我可以在 Elasticsearch 中区分一个字段时使用计数查询吗?
- c# - 字节实例和字节数组实例的比较
- flutter - 使用颤振切换 beetwen 站点
- android - 有人在 Pixel 手机上观察到用于 NFC 应用程序开发的 NFC 稳定性问题吗?
- java - 使用 WeekFields 的 LocalDate 错误输出
- reactjs - 在 node_modules 中添加没有 @types 范围的新全局 react JSX 属性
- google-tag-manager - Google Tag Manager / GTM - 自定义事件触发器变成变量?