Rails paperclip gem – 从私人文件夹中获取文件
我正在使用paperclip将文件上传到我的服务器。 如果我没有指定路径,回形针将文件保存到公用文件夹,然后我可以通过访问视图中的来下载它。 但是,如果我指定非公共文件夹的路径,显然不可能从视图中获取文件。
我想知道从web和ruby脚本下载保存文件的方法。
我们需要做的第一件事是添加一个route.rb的路由来访问文件。
编辑routes.rb并以粗体添加:member参数:
resources:users, :member => {:avatars =>:get}
现在,为了获得用户7的头像,我们可以发出如下的URL:
localhost:3000/users/7/avatars
…并且请求将被路由到users
控制器中的avatars
动作(复数,因为用户可能具有多种风格的化身)。
所以现在让我们继续前进并实现avatar方法并添加一些代码以将文件下载到客户端。 这样做的方法是使用ActionController :: Streaming :: send_file 。 这很简单; 我们只需要将文件的路径传递给send_file以及客户端使用的MIME内容类型作为决定如何显示文件的线索,就是这样! 让我们对这些值进行硬编码以便更好地理解(更新机器的路径):
class UsersController < ApplicationController def avatars send_file '/path/to/non-public/system/avatars/7/original/mickey-mouse.jpg', :type => 'image/jpeg' end end
现在,如果您在浏览器中输入localhost:3000/users/7/avatars
您应该会看到米奇图像。
我们显然需要能够处理任何用户记录的任何头像文件附件请求,而不是对头像方法中的路径进行硬编码。 为此,请配置Paperclip并告诉它文件现在存储在文件系统中的位置,以及我们配置要使用的routes.rb文件的URL。
为此,我们需要在我们的用户模型(user.rb)中调用has_attached_file时添加几个参数,
has_attached_file :avatar, :styles => { :thumb => "75x75>", :small => "150x150>" }, :path => ':rails_root/non-public/system/:attachment/:id/:style/:basename.:extension', :url => '/:class/:id/:attachment'
但现在我们可以在UserController中推广我们的代码来处理任何用户,如下所示:
def avatars user = User.find(params[:id]) send_file user.avatar.path, :type => user.avatar_content_type end
现在我们可以再次测试localhost:3000/users/7/avatars
以确保我们没有破坏任何东西。
干杯!
- 如何上传多页PDF并使用Paperclip将其转换为JPEG?
- 每次推送到heroku,图像都没有显示,回形针
- 将PDF / Worddocs上传到应用程序Rails后获取“nil”
- Ruby on Rails错误:“未定义的方法`call”表示“result == false”:字符串“create method中的错误
- rails paperclip没有通过sql查询从另一个模型直接访问
- Heroku:使用回形针运行imagemagick
- 回形针可以从S3铲斗中读取照片几何图形吗?
- 使用Ruby 1.8.7的未定义方法`has_attached_file’,带有paperclip 2.3.8 gem for Rails 2
- Paperclip + RSpec:content_typevalidation