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

Я следую этому руководству и у меня есть решение, которое загружает объекты в облачное хранилище Google с использованием подписанного URL-адреса и API-интерфейса REST XML (например, 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), но я вроде в растерянности.

1 ответ

Решение

Если я правильно понял, вы хотите загрузить свой объект, используя 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 для загрузки простого текстового файла.

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

Другие вопросы по тегам