2012-01-16 37 views
1

我正在嘗試構建移動應用程序的api,並使用Carrierwave和Mongoid。一切工作正常與上傳和檢索圖像,但是當我生成的JSON響應圖像網址只顯示一個路徑/到/ image.png而不是http://localhost:3000/path/to/image.pngCarrierwave + Mongoid json響應中的完整網址

如何讓我的應用程序生成圖像的完整url。我在Google上進行了大量搜索,但無法找到任何可靠的解決方案。

在此先感謝您的幫助。

回答

1

我不認爲你可以在默認情況下carrierwave做到這一點,但你可以通過這個猴子補丁

module CarrierWave::Uploader::Url 
    def url 
    if $request 
     if file.respond_to?(:url) and not file.url.blank? 
     $request.protocol + $request.host_with_port + file.url 
     elsif current_path 
     $request.protocol + $request.host_with_port + (base_path || "") + File.expand_path(current_path).gsub(File.expand_path(root), '') 
     end 
    else 
     raise ArgumentError, "Request object is empty" 
    end 

    end 

end 

解決這個,因爲你不能從上傳(任何型號),您需要訪問軌session/request信息在application_controller定義before_filter加載請求數據

before_filter :load_request 

    def load_request 
    $request = request 
    end 

我只在本地存儲/ mongoid測試此補丁。我不知道這將如何在亞馬遜s3 /霧..

希望這可以幫助

+0

感謝您的答覆。猴子補丁是否應該進入上傳文件?我也爲圖像使用本地存儲(Grid FS)。 – ags9 2012-01-17 14:20:01

+0

你可以把它放在載波初始化器,這將做的伎倆..我相信它也可以用於本地存儲,但你可以驗證.. :) – RameshVel 2012-01-17 14:49:49