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