我有一个rails 3应用程序,允许用户通过回形针将文件上传到Amazon s3来共享文件,我想允许其他用户下载这些文件。然而,在我的应用程序和Amazons3之间的某个地方,这个文件似乎正在进行某种后期处理。
这是我的代码:
has_attached_file :attachment,
:storage => :s3, :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:path => ':id/:style', :bucket => "test_development"
这很好,但是,如果我真的去了amazons3开发工具,文件的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,然后稍后再次下载。。我该怎么做?
谢谢!
:path
选项用作完整文件名。没有添加任何内容,只是插值。尝试:path => ':id/:style/:basename.:extension'
。
当您更改:path
时,通常还必须更改:url
。
更多信息:
- http://rdoc.info/github/thoughtbot/paperclip/master/Paperclip/Storage/S3
- http://rdoc.info/github/thoughtbot/paperclip/master/Paperclip/Storage/Filesystem
- http://rdoc.info/github/thoughtbot/paperclip/master/Paperclip/ClassMethods#has_attached_file-instance_method