如何在显示视图中访问 Rails/Paperclip S3 资产,aws-sdk 2

How to access Rails / Paperclip S3 assets in show view, aws-sdk 2

使用新的 AWS Ruby SDK (aws-sdk 2.2.18) 和 Paperclip,我成功地将音频文件上传到 S3。

我找到的教程和文档都是参考1.x版本的aws-sdk,例如: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

我遇到的问题是,当我尝试访问显示视图中的 link 来播放音频时,它没有指向回 S3。

显示视图

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

渲染

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

如何访问 S3 中的资产,并专门播放音频?

您的 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 %>

将自动 return 正确 URL 指向存储在 S3 存储桶中的文件。

希望对您有所帮助!