我正在使用带有雾的carrierwave在我的服务器上创建一个简单的图像上传过程。 目标是将图像存储在我的服务器中:
/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
当我上传图片时,我可以看到它存储在相应的文件夹中。但是如何在我的网页中显示它们? 生成的网址是
http://localhost:3000/opt/myapp/uploads/<path-to-my-image>.png
所以我的应用程序试图从我的rails应用程序目录中的opt /文件夹中获取图像,但是我怎么能告诉它从服务器文件系统中检索它们呢?
答案 0 :(得分:3)
好的,这很容易做到:
首先为相应的网址添加路由:
match '/opt/myapp/uploads/:file_name' => 'files#serve'
使用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