好的,这就是交易,我正在创建一个网络应用程序,并且我正在添加将音乐上传到用户个人资料的功能。我正在使用 Rackspace 云文件进行存储,但在完成两项任务时遇到了一些麻烦。首先,我无法编写将文件上传到容器的代码。其次,我需要生成要存储在数据库中的文件的 url。我对集成 API 很陌生,所以我没有很多知识。
object = container.create_object 'filename', false
object.write file
此代码对于上传文件是否正确?
好的,这就是交易,我正在创建一个网络应用程序,并且我正在添加将音乐上传到用户个人资料的功能。我正在使用 Rackspace 云文件进行存储,但在完成两项任务时遇到了一些麻烦。首先,我无法编写将文件上传到容器的代码。其次,我需要生成要存储在数据库中的文件的 url。我对集成 API 很陌生,所以我没有很多知识。
object = container.create_object 'filename', false
object.write file
此代码对于上传文件是否正确?
首先,如果您还没有使用它,官方支持的用于直接与来自 Ruby 的 Cloud Files 交互的 Ruby 库是fog。首先,将其添加到您的Gemfile
:
gem 'fog'
然后运行bundle install
安装它。
要上传文件并获取其公共 url,直接使用雾:
# 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
然而!你正在做的是 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 文档。