如何从谷歌云存储中批量删除文件? (Node.js)

Posted

技术标签:

【中文标题】如何从谷歌云存储中批量删除文件? (Node.js)【英文标题】:How to delete files from Google Cloud Storage in a batch? (Node.js) 【发布时间】:2021-01-12 03:45:42 【问题描述】:

我正在尝试从 gc 存储中批量删除 2 个文件,这取决于它们自己。到目前为止,我一直在做这样的事情:

exports.deleteImageFromBucket = async function (uri, bucket) 
  const imagePath = getStoragePathFromUrl(uri);

  try 
    await bucket.file(imagePath).delete();
   catch (err) 
    console.error(`Error deleting image $uri from storage`);
    throw err;
  
; 

但是,由于我有图像和它们各自的缩略图,如果我调用此函数两次并且其中一次拒绝,这将导致糟糕的用户体验。

有什么想法吗?

【问题讨论】:

您担心的不良用户体验是什么? 这里只删除一张图片?在 2 个不同的 URI(图像和缩略图)上调用 2 次这个函数有什么问题? @DougStevensone 在客户端我有图像组件,首先加载缩略图,然后是 hq 图像。在我的算法中,我首先删除了这两个图像,然后删除了数据库中的关联文档。如果两个图像之一在删除它时失败,那么我的代码将不会触及数据库并向客户端抛出错误,说“稍后再试”之类的内容,只是为了确保存储完全回收(如果用户尝试稍后再做一次,那么两次删除可能会很好,并且存储中不会有任何不必要的垃圾之王)... ...但是没有批量操作,如果缩略图没有被删除,但是hq图像是的,那么用户会在图像中看到缩略图并且无法获得完整的质量一个(这是一个渐进式加载的图像) 【参考方案1】:

据我所知,云存储没有批量删除功能。这意味着您必须:

    执行两个单独的删除调用。 确保任何代码加载图像都足够健壮,可以处理这些图像中只有一个缺失的情况。您通常可以通过按特定顺序删除图像来减少这种影响。例如:如果用户从缩略图中看到全尺寸图像,则首先删除缩略图可确保即使全尺寸图像留在后面,应用仍然可以运行。 运行定期进程以删除孤立文件。

【讨论】:

以上是关于如何从谷歌云存储中批量删除文件? (Node.js)的主要内容,如果未能解决你的问题,请参考以下文章

使用node.js中的firebase从谷歌云存储读取时,ESlint问题“每个都应该返回一个值或抛出”

如何从谷歌云存储中读取子目录/前缀中的文件?

使用python从谷歌云存储桶中删除数据时出错

从谷歌云存储桶中读取文件

如何使用 gsutil 通过 http 链接从谷歌云存储下载到 AWS 实例或 s3 存储桶?

如何在谷歌大查询中从谷歌云存储上传表格