使用image_tag
方法在公共目录中提供图像非常简单,但是我不希望公开访问的图像,仅限管理员的图像,可能。< /强>
我的控制器和视图应如何显示,以便image_tag
方法提供来自root/private/images
而非root/public
的图像。而且,这将是完全安全的,对吧?如果我有私有图像,并且只想向管理员提供服务,那么一个简单的if语句来检查用户是否是管理员,然后使用image_tag为他们提供公共文件夹外部的私有图像是安全的吗?
我对如何执行没有回形针感兴趣。 (回形针甚至没有提到,所以它不是重复的)
答案 0 :(得分:0)
我不确定您是如何处理管理员身份验证的,但假设您有单独的登录信息。
将图像存储为MySQL中的BLOB。
使用带有身份验证的rails控制器中的send_data
返回请求的图像文件
这个link有一个例子
答案 1 :(得分:0)
假设图像与附有回形针的模型相关,则可以执行此操作。 (我真的推荐这个。)
def show
@image = Image.find(params[:id])
published_image = @image.published_image
respond_to do |format|
format.all {
if published_image
send_file published_image.attached_image.path, :type=> published_image.attached_image_content_type
else
raise ActionController::RoutingError.new('Not Found')
end
}
end
end
假设您有另一种方法可以告诉它,您可以让所有以/ admin / image路由开头的路由到控制器操作,然后在路径的其余部分调用渲染文件。示例:
routes.rb
get 'admin/photo/*other', to: 'admin#photos'
admin.controller.rb
def photos
if current_user.admin?
render file: Rails.root.join("private","admin","images",request.path.gsub("/admin/photo/","")
else
render :file => "public/401.html", :status => :unauthorized
end
end
view
image_tag "/admin/photos/id.jpg"
这在理论上是有效的,但它可能比我想的更复杂
此处的图片将托管在public / admin / images中,但链接到/ admin / photos / id