谷歌云存储多部分图像上传(NodeJS)

Posted

技术标签:

【中文标题】谷歌云存储多部分图像上传(NodeJS)【英文标题】:Google Cloud Storage Multipart Image upload (NodeJS) 【发布时间】:2022-01-09 19:05:50 【问题描述】:

我正在将应用程序从 Azure 存储迁移到 Google 云存储。

我的上传API如下:

let uploadFile = async (req, res) => 
try 
  var form = new multiparty.Form();
  form.on("part", async function (part) 
    if (part.filename) 
      let filnam = part.filename.replace(/\s/g, "");
      var size = part.byteCount - part.byteOffset;
      container = containerName(part.headers["content-type"]);

      blobName = fileName(filnam);

      let fileDetails = await GCSService.uploadFile(
        container,
        part,
        blobName,
        part.headers["content-type"],
        part.filename
      )
      Response.success(res, res, status.HTTP_OK, fileDetails);
    
  );
  form.parse(req);
  
 catch (err) 
  console.log("Error Uploading File: ", err);
  throw new Error("file upload error");

;

使用 Azure 存储,我可以使用 uploadStream 函数直接上传分段,

await blockBlobClient.uploadStream(part, 4 * 1024 * 1024, 20, 
    blobHTTPHeaders: 
      blobContentType: mimetype
    ,
    onProgress: (ev) => console.log(ev)
  );
  const blobClient = containerClient.getBlobClient(blobName);

但是当我尝试使用 Google Cloud Storage createWriteStream 进行相同操作时,它会上传文件,但文件是 0 字节。

bucket.file(blobName).createWriteStream(
         resumable: false
    ).on('finish', async () => );

谁能指出正确的 Google Cloud Storage 实施方向?

谢谢

【问题讨论】:

【参考方案1】:

尝试使用来自 GCS API reference 的示例:

fs.createReadStream('/Users/stephen/Photos/birthday-at-the-zoo/panda.jpg')
  .pipe(file.createWriteStream())
  .on('error', function(err) )
  .on('finish', function() 
    // The file upload is complete.
  );

another Stack thread 中也讨论了类似的问题。

【讨论】:

以上是关于谷歌云存储多部分图像上传(NodeJS)的主要内容,如果未能解决你的问题,请参考以下文章

春季启动图像上传到谷歌云存储桶不起作用

如何使用 multer 和 NodeJS 将图像上传到 GCS 存储桶?

如何使用签名的 URL 将文件上传到谷歌云存储桶

谷歌云平台数据集无法在 VertexAI 中显示图像

可恢复上传的“临时文件”是不是计入每月存储费? (谷歌云存储)

从谷歌云存储获取状态 503