Как изменить метаданные всех указанных c файлов существующих объектов в Google Cloud Storage? - PullRequest
0 голосов
/ 04 февраля 2020

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

Интересно, смогу ли я установить какую-то политику? как, например, изменение всех типов содержимого файлов одновременно, например, у меня есть куча. html файлов внутри корзины

a/b/index.html
a/c/a.html
a/c/a/b.html
a/a.html
.
.
.

- это возможность установить тип содержимого всех. html файлы с одной командой в другом месте?

Ответы [ 2 ]

0 голосов
/ 04 февраля 2020

Вы можете сделать:

gsutil -m setmeta -h Content-Type:text/html gs://your-bucket/**.html
0 голосов
/ 04 февраля 2020

Не существует уникальной команды для достижения требуемого поведения (одна команда для редактирования всех метаданных объекта), однако есть команда gcloud для редактирования метаданных, которую можно использовать в скрипте bash, чтобы сделать все oop через все объекты внутри корзины.

1.- Опция (1) - использовать команду gcloud "setmeta" в сценарии bash:

# kinda pseudo code here.

# get the list with all your object's names and iterate over the metadata edition command.

for OUTPUT in $(get_list_of_objects_names)
do

gsutil setmeta -h "[METADATA_KEY]:[METADATA_VALUE]" gs://[BUCKET_NAME]/[OBJECT_NAME]
# the "gs://[BUCKET_NAME]/[OBJECT_NAME]" would be your object name.

done

2. Вы также можете создать скрипт C ++ для достижения того же:

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name,
   std::string key, std::string value) {

# you would need to find list all the objects, while on the loop, you can edit the metadata of the object.

for (auto&& object_metadata : client.ListObjects(bucket_name)) {

  string bucket_name=object_metadata->bucket(), object_name=object_metadata->name();

  StatusOr<gcs::ObjectMetadata> object_metadata =
      client.GetObjectMetadata(bucket_name, object_name);

  gcs::ObjectMetadata desired = *object_metadata;
  desired.mutable_metadata().emplace(key, value);

  StatusOr<gcs::ObjectMetadata> updated =
      client.UpdateObject(bucket_name, object_name, desired,
                          gcs::Generation(object_metadata->generation()))
}

}
...