如何在显示视图中访问 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 }
中提供了更多信息
正确设置 s3 连接后,您将不需要更新方法中的任何代码。
通话中
<%= link_to @sentence.audio.url %>
将自动 return 正确 URL 指向存储在 S3 存储桶中的文件。
希望对您有所帮助!
使用新的 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 }
中提供了更多信息
正确设置 s3 连接后,您将不需要更新方法中的任何代码。
通话中
<%= link_to @sentence.audio.url %>
将自动 return 正确 URL 指向存储在 S3 存储桶中的文件。
希望对您有所帮助!