Ich verwende keine Büroklammer oder Carrierwave oder andere Edelsteine für die Interaktion mit Amazon Web Services s3. Tatsächlich verwende ich keine Modelle, nur direkt mit S3-Objekten interagieren.Herunterladen von S3-Dateien (Objekte) mit aws-sdk für Ruby in Schienen
Kann jemand geben Sie bitte einen Code, wie direkt Objekte (Dateien) von AWS S3
Das ist mein Code zum Download ist so weit:
Ausblick:
<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 %>
Entsprechende Steuerung:
def xxx
bucket = AWS::S3.new.buckets[ ENV["BUCKET"]]
@root_files = bucket.as_tree.children.select(&:leaf?).collect(&:key)
end
download_url_for Methode:
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
Ich muss in der Lage, die heruntergeladene Datei auf einem beliebigen durchsuchbaren nicht-pretedetermined Lage auf meinem desktop.Id wirklich zu schätzen Ansicht zu speichern, wie die download_url_for Methode zu ändern, dies zu erreichen .
===================================== Ich habe gerade versucht
mit<td><%= link_to "Download",object.value.url_for(:read).to_s %></td>
Aber beim Herunterladen bekomme ich nur eine ZIP-Datei mit XML-Inhalt, nicht die ursprüngliche Datei (Word-Dokument in meinem Fall) --- irgendwelche Gedanken darüber, wie man dies ändert, um den eigentlichen Dateityp und Inhalt zu bekommen? Dank
======================= Heres mein Code
Ansicht Code, um die Datei für das Hochladen:
<%= form_tag({:action => 'create_file'}, multipart: true) do %>
<%= file_field_tag 'uploaded_file' %><br />
<%= submit_tag 'Upload' %> <br />
<% end %>
Controller-Aktion - CREATE_FILE Aktion
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
jemand behaupten kann, wie ich den MIME-Typ überprüfen oder den Dateinamen während upl bewahren wenn das Problem von @Frederick Cheung angesprochen wird? danke
docx-Dateien sind gezippte XML-Dateien hinter den Kulissen - klingt wie Sie vielleicht nicht MIME-Typen erhalten oder Dateinamen, wenn die Datei ist hochgeladen. –
Bearbeitete meine Antwort unten. – rossta
@Frederick Cheung Ich habe meine ursprüngliche Frage aktualisiert, um auch meinen Upload-Code einzuschließen ... kannst du mir bitte mitteilen, wie ich den MIME oder Dateinamen beim Hochladen überprüfen kann? – orange88