【问题标题】:Delete multiple objects fron google cloud storage using node.js使用 node.js 从谷歌云存储中删除多个对象
【发布时间】:2016-04-04 13:08:33
【问题描述】:

我需要从谷歌云存储中删除多个对象。我一次删除了一个对象。

这是我的代码:

var gcloud = require('gcloud')({
  projectId: "sampleProject1"
});
var gcs = gcloud.storage();
var myBucket = gcs.bucket('sampleBucket1');
var file = myBucket.file('1.png');

file.delete(function (err, apiResponse) {
  if (err) {
    console.log(err);
  }
  else {
    console.log("Deleted successfully");
  }
});

但我需要同时删除多个对象。有没有可能?

【问题讨论】:

    标签: node.js npm google-cloud-storage gcloud-node


    【解决方案1】:

    我们确实有 bucket#deleteFiles 可以为您处理限制请求。您可以使用prefix 选项通过命名约定来定位多个图像,例如:

    bucket.deleteFiles({ prefix: 'image-' }, callback);
    

    如果这不起作用,我们还有一个指南,说明如何自己执行限制逻辑。请参阅“我的请求返回错误,指示我重试请求”:https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.29.0/guides/troubleshooting

    编辑以详细说明如何使用 async 进行节流:

    var async = require('async');
    var PARALLEL_LIMIT = 10;
    
    function deleteFile(file, callback) {
      file.delete(callback);
    }
    
    async.eachLimit(filesToDelete, PARALLEL_LIMIT, deleteFile, function(err) {
      if (!err) {
        // Files deleted!
      }
    });
    

    【讨论】:

      【解决方案2】:

      没有办法同时从 GCS 中原子地删除多个对象。

      但是,您可以使用batch API 在一次调用中发出多个请求,该调用返回每个单独操作的状态。

      【讨论】:

        【解决方案3】:

        我创建了一个包含我想要删除的所有对象的数组,然后遍历该数组,执行谷歌云存储文档中指定的“删除”函数。

        Delete GCS object

        const storage = new Storage({keyFilename: 'google-credentials.json'});
        const imagesToDelete = ['fileName1', 'fileName2', 'fileName3'];
            
            imagesToDelete.map(async (image) => {
              await storage
                .bucket('yourbucketName')
                .file(image)
                .delete();
            });
         
        

        【讨论】:

        • 用映射数组调用await 会更好。
        【解决方案4】:
            var gcloud = require('gcloud')({
            projectId: "sampleProject1"
             });
            var gcs = gcloud.storage();
           var myBucket = gcs.bucket('sampleBucket1');
           var collection = gcs.collection("Add file for delete");  
           collection.insert({'1.png'},{'2.png'});
        
           collection.delete(function (err, apiResponse) {
           if (err) {
            console.log(err);
            }
           else {
            console.log("Deleted successfully");
           }
           });
        

        【讨论】:

        • 该代码可能有效,但请解释一下它究竟做了什么,以便 OP 可以更清楚地理解为什么要使用此代码来实现他的目标。只需稍微编辑您的答案并在那里添加一些评论。
        • 使用集合,如(列表、字典、地图等)
        • gcs.collection 是从哪里来的?我们的 API 上没有该方法:googlecloudplatform.github.io/gcloud-node/#/docs/v0.30.1/… :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-28
        • 2021-01-12
        • 1970-01-01
        • 2019-09-20
        • 1970-01-01
        • 2021-03-30
        相关资源
        最近更新 更多