如何从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文件(名称为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);
};

编辑:这个问题似乎很多问题合而为一。但是,由于这必须作为一个整体来进行,因此我不要求提供确切的答案,而是要求提供有关研究内容以更好地理解解决方案的想法。

阿毛里

您将收到“未处理的拒绝TypeError:dest.write不是函数” bcourBucket不是可写流它必须是可写流的实例,您才能通过管道将其写入。您应该创建一个存储桶文件可写流,并将其用作ourBucket

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何管道传输到文件(NodeJS)

Nest.js 和 Archiver - 将 zip 文件通过管道传输到 http 响应中

通过终端将文件传输到云

如何将文件的输出通过管道传输到命令?

如何通过管道将多个文件传输到ffmpeg?

如何将文件通过管道传输到 Deno 中的子进程?

如何将文件名通过管道传输到 ffmpeg 命令中?

如何将命令输出通过管道传输到 shell 中的 CSV 文件?

如何将给定文件的行通过管道传输到 shell 命令中?

将“Azure Blob 存储”文件 URL 流式传输到 Amazon S3 存储桶

如何将多个文件直接下载、解压和传输到 s3 存储桶中?

如何通过本地Docker容器中的python应用程序从云存储桶中读取文件

如何通过云功能在Google存储桶中以二进制模式打开文件?

将多个文件中的数据通过管道传输到其原始文件中

如何检索云存储桶中的最新文件?

如何通过scp或sftp将远程文件通过管道传输到stdout?

解压缩.zip文件并使用python和boto 3传输到s3存储桶

直接将文件管道传输到AWS SSM参数存储?

停止grep解析通过管道传输到文件的自身输出

将文件内容通过管道传输到 AWK

通过管道传输到jq后将输出写入文件

我无法将终端输出通过管道传输到文件

如何获取存储桶文件的the

如何通过Azure网站上的Node.js应用程序将大文件的上传流通过管道传输到Azure Blob存储?

通过Node / Express服务器将大文件(2GB +)流式传输到Google Cloud Storage存储桶

如何通过管道将 Vertx 请求直接流式传输到文件

我如何尾部多个文件并将其输出通过管道传输到SSH连接

如何将文件名通过管道传输到tar?

如何将大tar.gz文件的内容通过管道传输到STDOUT?