2

オーケー、これで取り引きです。私は Web アプリを作成していて、ユーザー プロファイルに音楽をアップロードする機能を追加しています。ストレージに Rackspace クラウド ファイルを使用していますが、2 つのタスクを完了するのに少し苦労しています。まず、ファイルをコンテナにアップロードするためのコードを書くのに問題があります。次に、データベースに保存するファイルの URL を生成する必要があります。私はAPIの統合に非常に慣れていないため、多くの知識がありません。

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

ファイルをアップロードするためのこのコードは正しいですか?

4

1 に答える 1

0

フォグを直接使用する

まず、まだ使用していない場合は、Ruby から Cloud Files を直接操作するために公式にサポートされている Ruby ライブラリはfogです。開始するには、次のように追加しますGemfile

gem 'fog'

次に、実行bundle installしてインストールします。

ファイルをアップロードして公開 URL を取得するには、fog を直接使用します。

# 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 ではかなり一般的なユースケースなので、そのための gem があります: CarrierWaveです。次の行を Gemfile に追加します。

gem 'fog'
gem 'carrierwave'

実行bundle installしてインストールします。ここで、Cloud Files を使用するように 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 のドキュメントを参照してください。

于 2013-11-15T16:03:45.267 に答える