2014-03-29 50 views
-1

我on Rails的工作4项目,我需要存储由用户直接uploadaded一些图片,我必须能够创造一个图像画廊,一个用户只能查看自己上传。问题显示图片4

我上传的文件与CArrierWave宝石,而且它做精。我将默认上传目录(公共文件夹)更改为我的自定义文件夹(/ uploads/.....),但我认为我无法显示图像导致“上传”文件夹可以不能直接访问,但我不想让公共文件夹中的图像因为我不希望它们被任何人自由访问。我的观点的

代码

<div> 

      <%= @photos.each do |p| %> 
      <div> 
       <%= image_tag (p.path_url) %> 
      </div> 

      <% end %> 

     </div> 

我CarrierWave上传类:

class PhotoupUploader < CarrierWave::Uploader::Base 

    storage :file 

    def store_dir 
    "../app/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.album_id}" 
    end 

和照片模式:

class Photo < ActiveRecord::Base 
    belongs_to :album 

    attr_accessible :legend, :path 

    mount_uploader :path, PhotoupUploader 

end 

我该如何继续?

感谢

+0

这将是艰难的如果你不向我们展示一些代码,可以帮助你。另外,你在哪里上传照片(即Amazon S3)? – diasks2

+0

你真的试过检索图像吗?假设你只是覆盖'store_dir'方法来指定你的自定义文件夹,你就可以正常使用'retrieve_from_store'或'url'方法。 – 2014-03-29 17:08:41

+0

@ diasks2这更多的是一种概念上的问题,不是一个代码问题.. – Pavarine

回答

0

您将需要从控制器直接服务于你的图片(见这个问题如何:Rendering an image):

def image 
    render :text => open(File.join('/uploads', user_id, params[:image_id], "rb").read 
end 

用法:

<% image_tag "image?image_id=154" %> 
+0

这是从我的情况不同,因为我刚才本地存储的文件,我不想做出这样的代理, – Pavarine

+0

通过“被代理”你可以控制谁可以查看哪个图像。如果你给_any_静态URL,它会提供给所有用户,因为它是静态的...... –

+0

你说得对@Uri阿加西..这是我的错觉......我会尝试这个.. – Pavarine