Удалить папку в Google Cloud Storage с помощью nodejs gcloud api

Я использую gcloud nodejs api для доступа к Google Cloud Storage. Я могу сохранять / удалять / существующие файлы по отдельности, но я не нашел способа удалить папку или даже перечислить файлы в папке с помощью gcloud nodejs api.

Я видел, как люди говорили, что иерархия папок в GCS - это не реальная древовидная структура, а просто имена. Поэтому я попытался использовать подстановочный знак для соответствия строке имени файла, что не увенчалось успехом.

Интересно, есть ли способ сделать это. Если нет, то какой инструмент мне следует использовать?


person Yuqing    schedule 26.07.2016    source источник


Ответы (2)


Код для вывода списка файлов в каталоге должен выглядеть примерно так:

bucket.getFiles({ prefix: 'directoryName/' }, function(err, files) {})

И удалить:

bucket.deleteFiles({ prefix: 'directoryName/' }, function(err) {})
person Stephen    schedule 27.07.2016
comment
Ссылки устарели. Во всяком случае, я не смог найти никаких ссылок на функцию deleteFiles в документации. Пришлось посмотреть исходный код. Только одно дополнение: без опции delimiter: '/' функция удаляет все файлы и подпапки. - person Samuel Méndez; 03.01.2020
comment
@ SamuelMéndez только что обновил ссылки в ответе @Stephen. deleteFiles, к счастью, существует, документация находится здесь. Ваше здоровье - person Greg Sadetsky; 26.12.2020

Вместо использования gcloud nodejs api есть два других способа сделать это.

  1. Используйте пакет googleapis для доступа к стандартным JSON API и XML API gcs. googleapis - это инструмент API нижнего уровня, который включает взаимодействие с облачными службами Google. Мы можем создавать / выводить / удалять файлы на gcs. Документация и примеры:

  2. Используйте childe_process для запуска gsutil инструмента командной строки. Это не стандартный способ программного доступа к API Google, но все же жизнеспособное решение. При вводе команды разрешается использовать Wildcard. Обратите внимание, что это может не работать на движке приложений Google. Вот пример.

Nodejs

var exec = require('child_process').exec;
exec("gsutil rm gs://[bucketname]/[directory ]/*" , function(error,stdout,stderr){});

Как предположил Стивен, наиболее желательным подходом является использование стандартных gcloud методов bucket.getFiles и bucket.deleteFiles. Поскольку в gcs нет концепции каталогов, очевидно, что манипулирование несколькими файлами следует рассматривать как операцию на уровне корзины.

person Yuqing    schedule 27.07.2016
comment
Я попробовал решение, используя gsutil в своей облачной функции Firebase, и получаю следующую ошибку: gsutil: not found Есть ли способ установить gsutil в службе Google? - person Thomas; 13.07.2017
comment
думаю попробовать это в экземпляре облачного запуска. знаете ли вы, что изображения предварительно устанавливают на них gcloud? - person maxwell; 19.07.2020