Назад | Перейти на главную страницу

Как я могу сделать объект Google Cloud Storage общедоступным при загрузке через подписанный URL?

я следую этот руководство и имеет решение, которое загружает объекты в хранилище Google Cloud, используя подписанный URL-адрес и XML REST API (например, curl -v -X POST $URL -F "file=@test.jpg").

К сожалению, я не могу понять, как настроить ACL для этих объектов, чтобы они были общедоступны. Я пробовал использовать x-goog-acl заголовок (и различные заглавные буквы в подписанном URL-адресе и заголовках запроса) и acl параметр запроса безуспешно.

Я предполагаю, что это должно быть возможно, поскольку на это есть ссылки в документации по API, и все клиентские библиотеки позволяют вам это делать. У меня такое чувство, что я что-то лажаю в своем методе подписи URL (хотя заголовок появляется в подписанном URL: https://storage.googleapis.com/foo/test.jpg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=STUFF&X-Goog-SignedHeaders=host%3Bx-goog-acl&acl=public-read&MORE-STUFF), но я как бы в растерянности.

Если я правильно понял, вы хотите загрузить свой объект с помощью XML REST API и хотите, чтобы этот объект был общедоступным для всех.

Для этого вы можете следовать этому инструкции чтобы загрузить свой объект. Чтобы использовать файл вместо двоичного файла данных, просто замените --data-binary @[OBJECT] по -T [PATH_TO_FILE]. После этого, чтобы сделать объект общедоступным, вам нужно следовать эти шаги. Это сделает ваш объект всегда доступным для всех, и вам больше не понадобится подписанный URL-адрес.

С другой стороны, если вы хотите предоставить кому-либо доступ к объекту на ограниченный период времени, вы хотите сгенерировать этот подписанный URL, что и делает указанное вами руководство.

РЕДАКТИРОВАТЬ

Думаю, теперь я заставил это работать так, как вы хотели. Во-первых, вам нужно изменить код в учебнике, добавив еще один параметр запроса:

query_parameters['X-Goog-Acl'] = 'public-read'

Теперь вы можете запустить код Python с желаемыми параметрами (используя метод PUT) и используйте другой PUT с подписанным URL-адресом, примерно так:

curl -v -X PUT $SIGNED_URL -T "[PATH_TO_FILE]" -H "content-type:text/plain" -H "x-goog-acl:public-read"

В моем примере я создаю подписанный URL-адрес для загрузки простого текстового файла.

Я много пробовал это делать, и это работает.