我沒有使用paperclip或carrierwave或任何其他gem與amazon web服務s3進行交互。事實上,我沒有使用任何模型,只是直接與S3對象交互。使用aws-sdk下載S3文件(對象)for ruby in rails
是否有人可以提供一些代碼爲如何直接從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
download_url_for方法:
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
我需要能夠保存在任何可瀏覽非pretedetermined位置下載的文件在我的desktop.Id真的很感激視圖上如何修改download_url_for方法來實現這一目標。
===================================== 我只是用
<td><%= link_to "Download",object.value.url_for(:read).to_s %></td>
嘗試
但是在下載時我只能得到一個帶有xml內容的zip文件,而不是原始文件(在我的例子中是word文檔)---關於如何修改這個以獲得實際文件類型和內容的任何想法?由於
=======================繼承人我要上傳的文件
查看代碼代碼:
<%= form_tag({:action => 'create_file'}, multipart: true) do %>
<%= file_field_tag 'uploaded_file' %><br />
<%= submit_tag 'Upload' %> <br />
<% end %>
控制器動作 - create_file行動
def create_file
s3 = AWS::S3.new
bucket = s3.buckets[ENV["BUCKET"]]
key = params[:uploaded_file].original_filename
object = bucket.objects[key]
object.write(params[:uploaded_file].read)
end
有人建議,我怎麼可以檢查MIME類型或保存而UPL文件名如果那是由@Frederick Cheung提及的問題,請提交?謝謝
的docx文件是幕後壓縮的XML文件 - 聽起來像你也許不會在文件保存MIME類型或文件名已上傳。 –
在下面編輯我的回覆。 – rossta
@Frederick Cheung Ive更新了我的原始問題以包含我的上傳代碼......請允許我告訴我如何在上傳時檢查MIME或文件名? – orange88