Скрепка Rails 3 с загрузкой / загрузкой - PullRequest
0 голосов
/ 31 мая 2011

У меня есть приложение rails 3, которое позволяет пользователям обмениваться файлами, загружая их в Amazon s3 с помощью скрепки, и я хочу позволить другим пользователям загружать эти файлы. Однако какая-то постобработка, похоже, происходит с этим файлом где-то между моим приложением и Amazon s3.

Вот мой код:

  has_attached_file :attachment,
                    :storage => :s3, :s3_credentials => "#{RAILS_ROOT}/config/s3.yml", 
                    :path => ':id/:style', :bucket => "test_development"

Это работает нормально, однако, если я действительно обращаюсь к инструментам разработчика amazon s3, URL для файла выглядит так: http://s3.amazonaws.com/test_development/1/original без исходного имени или типа.

Затем я попытался использовать что-то вроде этого: [p.attachment.url(:original, false), p.attachment_file_name].join("/")

что дает: http://s3.amazonaws.com/test_development/1/original/test.pdf

Однако, если я попал на этот URL, я получаю загадочную ошибку XML:

<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>1/original/About Downloads.pdf</Key>
<RequestId>7E5CC6A01CADF831</RequestId>
<HostId>
4ruFf0JtdalnaIE/SHUAqT8hVYEda9Ul6gxNmYTIAniw7piTN+Q16uKKCzi9yezl
</HostId>
</Error>

Что я здесь не так делаю? Я просто хочу загрузить файл на s3 без какой-либо обработки, а затем загрузить снова позже ... как мне это сделать?

Спасибо!

1 Ответ

2 голосов
/ 31 мая 2011

Параметр :path используется в качестве полного имени файла.Ничего не добавлено, оно только интерполировано.Попробуйте :path => ':id/:style/:basename.:extension'.

А когда вы меняете :path, вам часто приходится менять также :url.

Дополнительные сведения:

...