希望确保只有登录的用户才能查看/下载从 carrierwave 上传的文件。
这是怎么做到的?
将存储目录从公共移动到 RAILS_ROOT,创建显示和下载路径。
问题是如果它是一个图像,<%= image_tag(photo.image_url) %>
我得到完整的路径/Users/myname/projects/appname/files/image/id/image.png,所以它不会呈现。
此外,如果视图不会呈现我的绝对路径,只会呈现来自站点的相对路径,那就太好了。
希望确保只有登录的用户才能查看/下载从 carrierwave 上传的文件。
这是怎么做到的?
将存储目录从公共移动到 RAILS_ROOT,创建显示和下载路径。
问题是如果它是一个图像,<%= image_tag(photo.image_url) %>
我得到完整的路径/Users/myname/projects/appname/files/image/id/image.png,所以它不会呈现。
此外,如果视图不会呈现我的绝对路径,只会呈现来自站点的相对路径,那就太好了。
这实际上是一件很容易做到的事情。这是一个讨论 sendfile 和 x-sendfile 的博客。这应该会让你朝着正确的方向前进。
http://www.therailsway.com/2009/2/22/file-downloads-done-right
这是它的rails docs。
http://api.rubyonrails.org/classes/ActionController/Streaming.html#method-i-send_file
由于这都是在控制器级别处理的,因此只需确保您有一个 before_filter 来检查用户是否被授权,然后在您的控制器操作中使用 send_file 方法。