我想知道如何让登录用户在服务器上下载他的文件和他的文件。例如,没有其他人,只有我可以在登录时下载我的Google文档文档。是否有一个概念页面,您可以轻松链接到我可以阅读的内容?有没有像食谱一样的书可能会更详细,更具体地说明Rails中的实现?是否有宝石/插件已经这样做了?
由于
答案 0 :(得分:1)
我建议创建一个限制访问下载的控制器。诀窍是通过控制器提供文件,而不是直接从Apache提供。我假设你在这里使用RestfulAuthentication和Paperclip:
这是模型(带有图像附件的照片)
class Photo < ActiveRecord::Base
belongs_to :user
has_attached_file :image, #:styles => {:thumbnail => "100x100#", :large => "800x600>"},
:path => ":rails_root/assets/:attachment/:id_partition/:style/:basename.:extension",
:url => "/assets/:userid/:attachment/:id/:style"
end
请注意url属性,该属性与下面的路由一起将强制通过控制器访问图像,而不是直接从公共目录访问。另请注意:path属性指定私有资产目录而不是默认的公共目录。
map.assets 'assets/:userid/:attachment/:id/:style', :controller => 'assets', :action => 'get', :conditions => {:method => :get }
现在,这是一个简单的控制器,它要求用户登录,检查用户ID并将相应的文件发送回用户。
class AssetsController < ApplicationController
before_filter :login_required
def get
if current_user.id == params[:userid].to_i
@photo = Photo.find params[:id]
send_file @photo.image.path(params[:style]), :type => @photo.image_content_type, :disposition => 'inline'
else
render :nothing => true
end
end
end
您还应该在send_file中指定:x_sendfile => true
,以便在控制器批准后让Apache承担实际服务文件的压力,从而提高性能。
答案 1 :(得分:0)
“让登录的用户在服务器上下载他的文件”
。您是否有办法独特地了解谁拥有哪个文件?这是起点,如果说文件是图像而你只想让我看到我的图像,那么在保存(上传)图像时,请确保将图像数据与我的用户ID一起存储。
因此,一旦登录,您只需选择属于我的内容。请看下面的表格(图片示例,假设它们存储在FileSystem中)
照片(id,title,desc,file_name,user_id *)*用户ID是登录用户的ID
这些插件可以提供帮助