2016-02-24 77 views
0

使用新的AWS Ruby SDK(aws-sdk 2.2.18)和Paperclip,我設法將音頻文件上傳到S3。如何訪問show view中的Rails/Paperclip S3資產,aws-sdk 2

的教程和文檔,我發現都是指AWS-SDK的1.x的版本,例如:Heroku tutorial

這是到目前爲止我的代碼:

模型

has_attached_file :audio 
validates_attachment_content_type :audio, :content_type => [ 'audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'audio/x-mp3', 'audio/mpeg3', 'audio/x-mpeg3', 'audio/mpg', 'audio/x-mpg', 'audio/x-mpegaudio' ] 

編輯形式(simple_form)

<%= f.input :audio, as: :file %> 

控制器

def update 
    if @sentence.update(sentence_params) 
    s3_bucket = Aws::S3::Resource.new.bucket(Rails.application.secrets.aws_s3_bucket) 
    s3_filename = get_s3_filename(@sentence) 
    s3_obj = s3_bucket.object(s3_filename) 
    s3_obj.put(body: sentence_params[:audio]) 
    redirect_to @sentence, notice: 'Sentence was successfully updated.' 
    else 
    render :edit 
    end 
end 

我遇到的問題是當我嘗試訪問show view中的鏈接來播放音頻時,它不指向S3。

放映視圖

<%= link_to @sentence.audio.url %> 

呈現

/system/sentences/audios/000/408/166/original/sample_audio.mp3?1456335849 

如何訪問該資產在S3中,特別播放音頻?

回答

1

看起來你缺少has_attached_file行中的s3_credentials選項。

has_attached_file :download, 
       :storage => :s3, 
       :s3_credentials => Proc.new{|a| a.instance.s3_credentials } 

有一個在Paperclip docs.

提供一些更多的信息一旦你正確設置S3連接,您將不再需要任何你在你的更新方法有代碼的。

調用

<%= link_to @sentence.audio.url %> 

會自動返回正確的URL指向存儲在S3存儲的文件。

希望有幫助!