如何使用rails应用程序显示使用carrierwave,fog和本地存储上传的文件?

时间:2013-07-15 10:00:26

标签: ruby-on-rails carrierwave image-uploading fog

我正在使用带有雾的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 /文件夹中获取图像,但是我怎么能告诉它从服务器文件系统中检索它们呢?

1 个答案:

答案 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