Reputation: 5003
I need to delete multiple objects from google cloud storage. I have deleted one object at a time.
This is my code:
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");
}
});
But I need to delete multiple objects simultaneously. Is it possible or not?
Upvotes: 8
Views: 6206
Reputation: 1
I created an array of all the objects that I wanted to delete and then iterated over the array, executing the "delete" function specified on the google cloud storage documentation.
const storage = new Storage({keyFilename: 'google-credentials.json'});
const imagesToDelete = ['fileName1', 'fileName2', 'fileName3'];
imagesToDelete.map(async (image) => {
await storage
.bucket('yourbucketName')
.file(image)
.delete();
});
Upvotes: 0
Reputation: 5770
We do have bucket#deleteFiles
that will handle throttling the requests for you. You can use the prefix
option to target multiple images by a naming convention, like:
bucket.deleteFiles({ prefix: 'image-' }, callback);
If that doesn't work, we also have a guide that shows how you can do the throttling logic yourself. See "My requests are returning errors instructing me to retry the request": https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.29.0/guides/troubleshooting
Edit to elaborate on how to do the throttling using 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!
}
});
Upvotes: 6
Reputation: 1
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");
}
});
Upvotes: -3