如何在nodeJS中从url获取文件,构建zip文件并管道到云存储桶



我想建立一个云函数,接收一个像这样的对象:

{
"files": [
{
"url": "https://myUrl/cat.jpg",
"name": "cat.jpg"
},
{
"url": "https://anyOtherUrl/mouse.jpg",
"name": "mouse.jpg"
},
{
"url": "https://myUrl2/dog.jpg",
"name": "dog.jpg"
}
],
"referenceId": "cute-images"
}

我想获得这些文件,将它们压缩成一个zip文件(name = referenceId),将该zip文件保存到一个桶中,最后,将zip URL作为响应发送回来。

我的主要问题在于内存的使用和我希望正确使用管道/流。我真的很感激在哪里可以找到这个实现的文档。

这是我现在得到的,但我不知道它是否有用:

const ZipStream = require("zip-stream");
const fetch = require("node-fetch");
const { Storage } = require("@google-cloud/storage");
exports.zipBuilder = async (req, res) => {
// Deleted lines of request validation
let zip = new ZipStream();
const queue = req.body.files;
async function addFilesToZip() {
let elem = queue.shift();
const response = await fetch(elem.url);
const stream = await response.buffer();
zip.entry(stream, { name: elem.name }, (err) => {
if (err) throw err;
if (queue.length > 0) addNextFile();
else zip.finalize();
});
}
await addFilesToZip();
const storage = new Storage();

const ourBucket = storage.bucket(process.env.DESTINATION_BUCKET);
zip.pipe(ourBucket); // this fails
// Get ZIP URL from bucket
res.send(zipUrl);
};
编辑:这个问题似乎集很多问题于一身。但由于这必须作为一个单一的流来工作,我要求的不是确切的答案,而是关于研究什么以更好地理解解决方案的想法。

您正在获得'未处理的拒绝类型错误:dest.write不是一个函数' bcourBucket不是一个可写流。它必须是一个可写流的实例,以便通过管道连接到它。您应该创建一个桶文件可写流,并将其用作ourBucket

相关内容

  • 没有找到相关文章

最新更新