我正在尝试为移动应用构建api并使用Carrierwave和Mongoid。上传和检索图像时一切正常,但是当我生成json响应时,图片网址只显示路径/ to / image.png而不是http://localhost:3000/path/to/image.png。
如何让我的应用生成图片的完整网址。我在谷歌上进行了广泛的搜索,但无法找到任何可靠的解决方案。
提前感谢您的帮助。
答案 0 :(得分: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
信息,因此您需要在before_filter
中定义application_controller
以加载请求数据
before_filter :load_request
def load_request
$request = request
end
我仅在本地存储/ mongoid中测试了此补丁。我不知道这将如何在亚马逊s3 /雾..
希望这有帮助