8

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

这是我的代码:

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");
  }
});

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

4

4 回答 4

6

我们确实可以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!
  }
});
于 2016-04-04T17:02:23.967 回答
0

无法同时从 GCS 原子地删除多个对象。

但是,您可以使用批处理 API通过一次调用发出多个请求,该调用返回每个单独操作的状态。

于 2016-04-04T16:18:24.210 回答
0

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

删除 GCS 对象

const storage = new Storage({keyFilename: 'google-credentials.json'});
const imagesToDelete = ['fileName1', 'fileName2', 'fileName3'];
    
    imagesToDelete.map(async (image) => {
      await storage
        .bucket('yourbucketName')
        .file(image)
        .delete();
    });
 
于 2020-11-07T12:16:08.870 回答
-3
    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");
   }
   });
于 2016-04-05T13:49:09.157 回答