Ruby on rails 使用aws sdk for ruby在rails中下载S3文件(对象)

Ruby on rails 使用aws sdk for ruby在rails中下载S3文件(对象),ruby-on-rails,ruby,forms,amazon-web-services,amazon-s3,Ruby On Rails,Ruby,Forms,Amazon Web Services,Amazon S3,我没有使用回形针、carrierwave或任何其他gems与amazon web services s3进行交互。事实上,我没有使用任何模型,只是直接与S3对象交互 有没有人能提供一些代码来说明如何直接从AWS S3下载对象(文件) 这是我目前的代码: 查看: <h2>Download Files</h2> <%@root_files.each do |file| %> <% next if @obj %> <td>Fi

我没有使用回形针、carrierwave或任何其他gems与amazon web services s3进行交互。事实上,我没有使用任何模型,只是直接与S3对象交互

有没有人能提供一些代码来说明如何直接从AWS S3下载对象(文件)

这是我目前的代码:

查看:

<h2>Download Files</h2>
<%@root_files.each do |file| %>
<% next if @obj %>        
<td>Filename:  <b><%= file %></b></td>
<td><%= link_to "Download", download_url_for(file) %></td>
<% end %>
def xxx
bucket = AWS::S3.new.buckets[ ENV["BUCKET"]]
@root_files = bucket.as_tree.children.select(&:leaf?).collect(&:key) 
end
<%= form_tag({:action => 'create_file'}, multipart: true) do %>
<%= file_field_tag 'uploaded_file' %><br />
<%= submit_tag 'Upload' %> <br />
<% end %>
下载方法的url\u

def download_url_for(file_key)
  s3 = AWS::S3.new
  bucket = s3.buckets[ ENV["BUCKET"]]
  object = bucket.objects[file_key]
  File.open('xxxxx', 'wb') do |file|
    object.read do |chunk|
      file.write(chunk)
    end
  end
end
我需要能够将下载的文件保存在我桌面上任何可浏览的不可预知的位置。我非常欣赏如何修改下载url以实现此目的的方法

===================================== 我只是试着用

<td><%= link_to "Download",object.value.url_for(:read).to_s %></td>

如果是@Frederick Cheung提到的问题,有人能建议我如何在上传时检查MIME类型或保留文件名吗?谢谢

您最好提供一个url供用户直接从S3下载,而不是尝试通过Rails应用程序流式传输文件

aws sdk为方法提供了
url\u以实现以下目的:。它采用了一系列过期、安全、缓存等选项。一个基本示例:

<td><%= link_to "Download", file.url_for(:read) %></td>

docx文件是后台压缩的xml文件-上传文件时,听起来您可能没有保留mime类型或文件名。下面编辑了我的回答。@Frederick Cheung我更新了我的原始问题,将我的上传代码也包括在内…您能告诉我上传时如何检查mime或文件名吗?
<td><%= link_to "Download", file.url_for(:read) %></td>
@root_files = bucket.as_tree.children.select(&:leaf?).collect(&:object)