2014-02-25 106 views
1

我正在構建一個網站,我希望保護某些圖像免於下載。只有授權用戶才能下載它們。保護使用Carrierwave上傳的圖像

當我使用Carrierwave上傳圖像時,它們被存儲在public/uploads/image之內。

def transmit 
    send_file(Rails.root.join('public' , 'uploads', 'image', filename.to_s) 
end 

如何保護內部image文件夾,使未經授權的用戶的圖像不能訪問它們:用戶可以通過鏈接下載呢?假設users表具有布爾列authorized

什麼是最好的方法來做到這一點?

EDIT1:

我知道我可以讓before_action它不會允許未經授權的用戶通過下載鏈接下載它,但如果用戶知道路徑在哪裏存儲圖像的文件夾的圖像仍然可以訪問。

+1

不要將它們存儲在公用文件夾 - 它們存儲在文件系統中的其他地方。 – sevenseacat

+0

@sevenseacat,謝謝。問題是我需要一些版本的圖像供公衆展示,所以我該如何做到這一點?我可以將不同的圖像版本存儲到不同的位置?我想有一些縮略圖存儲在公用文件夾和私人文件夾內的原件。 – user3339562

回答

2

通常載波圖像存儲在公共/上傳目錄中。

def store_dir 
'public/my/upload/directory' 
end 

如果您存儲項目的根文件夾以外的文件,你可能想用同樣的方式來定義的cache_dir:

class MyUploader < CarrierWave::Uploader::Base 
    def cache_dir 
    '/tmp/projectname-cache' 
    end 
end 
+0

謝謝。但是,我現在如何可以向公衆提供縮略圖?有沒有辦法在不同的位置存儲不同的圖像版本? – user3339562

+0

將上述所有拇指存儲在公共目錄中,並將您的實際圖像存儲在cache_dir中,並使用retrieve_versions_from_store檢索文件 – santosh

相關問題