Расшифруйте Blobkey App Engine в хранилище Google Cloud Storage Filename

У меня есть база данных, полная BlobKeys, которые ранее были загружены с помощью стандартного процесса Google App Engine create_upload_url(), и каждый из загрузки загрузились в ту же область Google Cloud Storage, установив аргумент gs_bucket_name.

То, что я хотел бы сделать, - это расшифровать существующие blobkeys, чтобы я мог получить их имена файлов Google Cloud Storage. Я понимаю, что мог использовать gs_object_name свойство FileInfo class, за исключением:

Вы должны сохранить gs_object_name самостоятельно в своем обработчике загрузки или эти данные будут потеряны. (Остальные метаданные для объекта в GCS хранятся в GCS автоматически, поэтому вам не нужно сохранять это в обработчике загрузки.

Значение gs_object_name Свойство доступно только в обработчике загрузки, и если я не сохранил его в это время, его потерял.

Кроме того, create_gs_key() не делает трюк, потому что вместо этого он берет имя файла хранилища google и создает blobkey.

Итак, как я могу взять blobkey, который был ранее загружен в ведро Google Cloud Storage через движок приложения, и получить его имя файла Google Cloud Storage? (Python)

Ответ 1

Вы можете получить имя файла cloudstorage только в обработчике загрузки (fileInfo.gs_object_name) и сохранить его в своей базе данных. После этого он потерян и, похоже, не сохраняется в BlobInfo или других структурах метаданных.

Google говорит: В отличие от метаданных BlobInfo метаданные FileInfo не сохранялся в хранилище данных. (Ключа тоже нет, но вы можете создайте его позже, если необходимо, вызовите create_gs_key.) Вы должны сохранить имя gs_object_name в вашем обработчике загрузки, или эти данные будут быть потерянным.

https://developers.google.com/appengine/docs/python/blobstore/fileinfoclass

Обновление: я смог декодировать SDK-BlobKey в Blobstore-Viewer: "encoded_gs_file: base64-encoded-filename-here". Однако реальная вещь не кодируется base64.

create_gs_key (filename, rpc = None)... Google говорит: "Возвращает зашифрованный ключ blob как строку". Кто-нибудь догадывается, почему это зашифровано?

Ответ 2

Из заявления в документах, похоже, что сгенерированные имена файлов GCS теряются. Вам нужно будет использовать gsutil для ручного просмотра вашего ведра.

https://developers.google.com/storage/docs/gsutil/commands/ls

Ответ 3

Если у вас есть blobKeys, вы можете использовать: ImagesServiceFactory. makeImageFromBlob