Alf*_*lfo 5 file-upload ruby-on-rails paperclip ruby-on-rails-3
我不确定我是否理解Paperclip是如何工作的,但据我所知,保存上传的默认位置在/ public文件夹中.当我在开发中上传我的照片时,它们会正确显示(我可以在文件结构中打开它们):
/public/bookmarks/:id/:style.:extension
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时bookmark.photo.url,我会得到类似的东西:
/system/bookmarks/thumbs/000/000/042/original/filename.png?1362768439
Run Code Online (Sandbox Code Playgroud)
这是我的bookmark.rb:
has_attached_file :photo,
:styles => { :medium => ["512x512>", :jpg], :thumb => ["200x200#", :jpg] }
:default_url => "public/bookmarks/default/:style.png",
:path => "assets/content/bookmarks/:id/:style.:extension"
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么吗?Paperclip不是要为我处理这些东西,还是我在配置中出错?
UPDATE
如果我在第一个答案中添加:path和:url,我得到:
<img src="/assets/bookmarks/44/original.jpg?1362775508">
Run Code Online (Sandbox Code Playgroud)
我应该得到:
<img src="/bookmarks/44/original.jpg?1362775508">
Run Code Online (Sandbox Code Playgroud)
但是,如果我注释掉该:url选项,而不是获取:

这个,这是默认的未找到的图像大小,我得到:

这个,与我在文件系统上的图像宽度相同,但是高度错误,没有找到.Chrome和Safari都会使用干净的缓存.当我转到URL时,我得到一个404.我还可以确认图像是在文件系统上正确存储的,并且可以从后端查看.
你所描述的行为有点奇怪。我建议您以类似于以下的方式设置 :url 和 :path:
url: '/:class/:id/:style.:extension',
path: ':rails_root/public:url'
Run Code Online (Sandbox Code Playgroud)
这意味着图像将存储在:
"#{Rails.root}/public/bookmarks/:id/:style.:extension"
Run Code Online (Sandbox Code Playgroud)
URL 将为您提供类似以下内容:
/bookmarks/bookmarks/1/thumbs.png
Run Code Online (Sandbox Code Playgroud)
请注意,您可以使用config.paperclip_defaults“application.rb”来执行此操作,因此您不必在每个模型上执行此操作。如果您想要不同的路径或存储,您可以在“生产.rb”上覆盖它,例如:
config.paperclip_defaults = config.paperclip_defaults.merge({
storage: :s3,
path: 'project_name/public:url'
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1272 次 |
| 最近记录: |