2013-07-15 47 views
3

我使用帶有霧的carrierwave在我的服務器上創建一個簡單的圖像上傳過程。 的目標是儲存在我的服務器在此文件夾中的圖片:如何顯示使用carrierwave,fog和本地存儲與rails應用程序上傳的文件?

/opt/myapp/uploads/ 

我已經配置carrierwave和霧與參數和上傳工作得很好:

CarrierWave.configure do |config| 

    config.fog_credentials = { 
    :provider    => 'Local', 
    :local_root    => '/opt/myapp/' 
    } 
    config.fog_public  = false    
    config.fog_directory = 'uploads/' 

    config.storage = :fog 
    config.asset_host = proc do |file| 
    '/opt/myapp/uploads/' 
    end 
end 

當我上傳的圖片我可以看到它存儲在相應的文件夾中。但是,我怎樣才能將它們顯示在我的網頁上? 生成的URL是

http://localhost:3000/opt/myapp/uploads/<path-to-my-image>.png 

所以我的應用程序試圖從我的Rails應用程序目錄中選擇/文件夾獲取的圖像,但我怎麼能告訴它從服務器的文件系統,而不是找回它們?

回答

2

好了,這是很容易做到:

首先添加路由爲相應的URL:

match '/opt/myapp/uploads/:file_name' => 'files#serve' 

的創建FilesController與服務方法:

class FilesController < ApplicationController 

    def serve 
    before_filter :authenticate_user! #used with Devise to protect the access to the images 
    path = "/opt/myapp/uploads/#{params[:file_name]}.png" 

    send_file(path, 
     :disposition => 'inline', 
     :type => 'image/png', 
     :x_sendfile => true) 
    end 
end 

然後我需要在我的development.rb和production.rb配置文件中添加此行:

config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" #to use with Thin and Nginx 
相關問題