2011-02-16 23 views
0

我們的應用程序託管在Heroku,所以沒有本地文件存儲。rails 3,heroku,aws-s3,只是試圖上傳一個文件到S3,這是一個POST(http/multipart)我們的應用程序

我們正在使用的第三方API沒有存儲它創建的WAV,它將文件(http /多部分)發佈回我們的應用程序。他們提供示例代碼來'簡單'將該文件發送到S3。他們提供的代碼(下面)不能在Rails 3 + Heroku上運行。我懷疑有一些不同的語法來指定我們讀取的輸入文件和臨時文件。 (代碼最初是爲西納特拉我不知道老[:filename][: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}'" 

UPDATE:幾乎工程,但創建的長度爲零的文件。我有點不知如何使用Tempfile,但我將require 'tempfile'添加到控制器類中,並將S3存儲行修改爲上述內容。

Heroku/Tempfile這件事的整個POST文件讓我的腦子冰冷了...任何想法都將不勝感激。首先,我不知道數據來自哪裏......當我檢查參數是否被張貼到應用程序時,我不應該看到除文件名之外的其他東西嗎?

回答

0

答案如下。我們必須將url參數從filename =更改爲myfilename =,因爲rails magic會自動使用'filename'作爲POST數據,所以它們在params []中彼此跺腳。

openme = params['filename'].tempfile.path 

snd = AWS::S3::S3Object.store(params[:myfilename], 
         File.open(openme), 
         'MYBUCKET') 
1

應該的工作方式與HTML表單文件上傳相同

<form action="/post_audio_to_s3" method="post" enctype="multipart/form-data"> 
<input type="file" id="file" name="file"/> 
<input type="submit" value="Upload"/> 
</form> 

嘗試使用測試你的行動的形式首次。然後確保你的第三方API將文件作爲多部分數據HTML POST提交給你。

+0

謝謝,但完全沒有解決問題...這是如何使用Heroku上的tempfiles處理上傳。 – jpwynn 2011-02-16 05:55:00

相關問題