2015-03-12 3 views
0

Итак, я создал веб-приложение в Ruby on Rails, которое загружает файл на Amazon S3. Я сохранил ссылку документа в базе данных, например, ниже.Как не использовать URL-адрес Amazon S3?

https://example.s3.amazonaws.com/mybucket/random_file.pdf

Но когда я пытаюсь открыть его, я получаю ошибку ниже. Как я могу непреднамеренно использовать файл random_file.pdf, используя драгоценный камень Ruby aws-sdk? (Или я должен сделать это с помощью консоли Amazon S3 в браузере?)

<Error> 
<Code>AccessDenied</Code> 
<Message>Request has expired</Message> 
<Expires>2014-12-24T06:09:09Z</Expires> 
<ServerTime>2015-03-12T19:12:38Z</ServerTime> 
<RequestId>03BlahBlah</RequestId> 
<HostId> 
randomstring 
</HostId> 
</Error> 

ответ

1

URL, вы дали является публичным, не подписанный URL. Если вы намерены пользователям получать доступ к объектам в своем ведомом S3 аннонимно, вам необходимо сохранить их с помощью ACL с открытым доступом.

В зависимости от инструмента, который вы используете для загрузки файла на Amazon S3, обычно вы можете указать консервированный public-read acl как часть процесса загрузки. Использование v2 в AWS-SDk драгоценного камня:

s3 = Aws::S3::Resource.new 
obj = s3.bucket('name').object('key') 
obj.upload_file('/source', acl:'public-read') 
obj.public_url 
#=> "https://..." 

Теперь вы сможете получить доступ к объекту через любой обычный запрос HTTP GET, например, с помощью браузера.