如何从谷歌云存储中批量删除文件? (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问题“每个都应该返回一个值或抛出”