2014-03-29 46 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