Ruby On Rails将歌曲上传到Rackspace Cloud Files容器

时间:2012-11-24 19:50:08

标签: ruby-on-rails ruby rackspace-cloud

好的,这就是交易,我正在创建一个网络应用程序,我正在添加将音乐上传到用户个人资料的功能。我正在使用Rackspace云文件进行存储,我在完成两项任务时遇到了一些麻烦。首先,我在编写代码以将文件上传到我的容器时遇到问题。其次,我需要生成要存储在数据库中的文件的url。我非常擅长集成API,所以我没有太多的知识。

object = container.create_object 'filename', false
object.write file

这段代码上传文件是否正确?

1 个答案:

答案 0 :(得分:0)

直接使用雾

首先,如果你还没有使用它,官方支持的Ruby库可以直接与Ruby的Cloud Files进行交互fog。首先,将其添加到Gemfile

gem 'fog'

然后运行bundle install进行安装。

上传文件并获取其公开网址,直接使用雾:

# Use your Rackspace API key, not your password; you can find your API key by logging
# in to the control panel, clicking on your name in the top-right, and choosing
# "account settings".

service = Fog::Storage.new(
  provider: 'rackspace',
  rackspace_username: ENV['RACKSPACE_USERNAME'],
  rackspace_api_key: ENV['RACKSPACE_API_KEY']
)

dir = service.directories.create key: 'directory-name', public: true

files_to_upload.each do |path|
  file = dir.files.create key: File.basename(path), body: File.open(path, 'r')
  puts "public URL for #{file} is #{file.public_url}"
end

使用CarrierWave

然而!你正在做的事情是Rails中非常常见的用例,所以它有一个宝石:CarrierWave。将以下行添加到Gemfile:

gem 'fog'
gem 'carrierwave'

运行bundle install进行安装。现在配置CarrierWave以使用云文件:

# config/initializers/carrierwave.rb

CarrierWave.configure do |config|
  config.fog_credentials = {
    :provider           => 'rackspace',
    :rackspace_username => 'xxxxxx',
    :rackspace_api_key  => 'yyyyyy'
  }
  config.fog_directory = 'name_of_directory'
end

接下来生成上传器

rails g uploader Song

现在您可以使用SongUploader来存储和检索歌曲数据。有关详细信息,请参阅生成的代码或CarrierWave docs