【发布时间】:2011-06-28 02:17:09
【问题描述】:
我们的应用托管在 Heroku,因此没有本地文件存储。
我们使用的第三方 api 不会存储它创建的 WAV,它会将文件 (http/multi-part) 发布回我们的应用程序。他们提供了示例代码来“简单地”将该文件发送到 S3。他们提供的代码(如下)不能在 Rails 3 + Heroku 上运行。我怀疑有一些不同的语法来指定我们从中读取的输入文件和临时文件。 (代码最初是为 Sinatra 编写的。我不知道旧的 [:filename] 和 [:tempfile] 是做什么用的,所以我删除了它们并猜测使用 Tempfile 的语法是这样的?)
def post_audio_to_s3
puts "*** POST_AUDIO_TO_S3 PARAMS:" + params.inspect
con = AWS::S3::Base.establish_connection!(
:access_key_id => 'MYKEY',
:secret_access_key => 'MYSECRET')
puts "** CON='#{con.inspect}'"
snd = AWS::S3::S3Object.store(params[:filename],
Tempfile.open(params[:filename]).path,
'bb_audios')
puts "** SND='#{snd.inspect}'"
更新:几乎可以工作,但创建了零长度文件。我有点不知所措,不知道如何使用 Tempfile,但我在控制器类中添加了require 'tempfile',并将 S3 存储线修改为上述内容。
整个 POST-a-file 到 Heroku/Tempfile 的事情让我的大脑结冰了……任何想法都会受到赞赏。一方面......我不知道数据来自哪里......当我检查参数时,如果它被 POSTED 到应用程序,我不应该看到除了文件名之外的东西吗?
【问题讨论】:
标签: ruby-on-rails file-upload amazon-s3 heroku