Google Cloud Storage + Nodejs: как удалить папку и весь ее контент - PullRequest
0 голосов
/ 02 марта 2019

Я использую Node 10 и gcs API.

Пытаюсь удалить папку и все ее содержимое, но не могу понять, как.

Ничего не найдено об удалении папок в документации API.

Я попробовал следующий код, который работает с отдельными файлами, но не со всей папкой:

const { Storage } = require('@google-cloud/storage');
const storage = new Storage({
    projectId: 'my-id'
});
const bucket = storage.bucket('photos');

// Attempt to delete a folder and its files:
bucket
    .file('album-1')
    .delete()
    .then(...)
    .catch(...);

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Решение, примененное @Ohad Chaet, с некоторыми корректировками:

let dirName = 'album-1';

let files = await bucket.getFiles();

let dirFiles = files[0].filter(f => f.id.includes(dirName + '/'));

dirFiles.forEach(async file => {
    await file.delete();
});
0 голосов
/ 02 марта 2019

Это связано с тем, что Google Cloud Storage на самом деле не имеет папок (или, как их называют, «подкаталогов»), а только файлов, начинающихся с префикса.

Например, ваша папка album-1 выглядит какв веб-интерфейсе облачного хранилища Google, но на самом деле это просто способ представления файлов, названия которых начинаются с album1/..., он же album1/pic1.jpg и т. д.

для удаления "Папка "album1, вам действительно нужно удалить все файлы, которые начинаются с album1/....Вы можете сделать это, выполнив следующие шаги:

let dirName = 'album-1';
// List all the files under the bucket
let files = await bucket.getFiles();
// Filter only files that belong to "folder" album-1, aka their file.id (name) begins with "album-1/"
let dirFiles = files.filter(f => f.id.includes(dirName + "/"))
// Delete the files
dirFiles.forEach(async file => {
    await file.delete();
})

Подробнее о подкаталогах вы можете прочитать в документации здесь: https://cloud.google.com/storage/docs/gsutil/addlhelp/HowSubdirectoriesWork

...