Nie używam spinacza ani nośnika danych ani żadnych innych klejnotów do interakcji z usługami Amazon World s3. W rzeczywistości nie używam żadnych modeli, tylko bezpośrednio wchodzę w interakcję z obiektami S3.Pobieranie plików S3 (obiektów) przy użyciu aws-sdk dla ruby w szynach
Może ktoś proszę podać jakiś kod, w jaki sposób, aby bezpośrednio pobrać obiektów (plików) z AWS S3
To jest mój kod do tej pory:
Widok:
<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 %>
Odpowiadający Kontroler:
def xxx
bucket = AWS::S3.new.buckets[ ENV["BUCKET"]]
@root_files = bucket.as_tree.children.select(&:leaf?).collect(&:key)
end
download_url_for metody:
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
muszę być w stanie zapisać pobrany plik na dowolnym do przeglądania non-pretedetermined miejscu na mojej desktop.Id naprawdę docenić pogląd na temat sposobu modyfikacji metody download_url_for do osiągnięcia tego celu .
===================================== Właśnie próbowałem przy użyciu
<td><%= link_to "Download",object.value.url_for(:read).to_s %></td>
Ale po pobraniu dostaję tylko plik zip z zawartością XML, a nie oryginalny plik (dokument Word w moim przypadku) --- wszelkie przemyślenia na temat modyfikowania tego tak, aby uzyskać rzeczywisty typ pliku i zawartość? Dzięki
======================= Herezje mój kod do przesyłania pliku
Zobacz Kod:
<%= form_tag({:action => 'create_file'}, multipart: true) do %>
<%= file_field_tag 'uploaded_file' %><br />
<%= submit_tag 'Upload' %> <br />
<% end %>
działanie kontrolera - create_file działanie
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
czy ktoś może sugerować, w jaki sposób mogę sprawdzić typ MIME lub zachowania pliku while UPL oading, jeśli jest to kwestia wspomniana przez @Frederick Cheung? dzięki
pliki docx są spakowane pliki XML za kulisami - brzmi jak jesteś chyba nie zachowując typu MIME lub nazwy pliku, gdy plik jest przesłane. –
Zmieniono moją odpowiedź poniżej. – rossta
@Frederick Cheung Ive zaktualizował moje pierwotne pytanie, dołączając również mój kod do przesłania ... czy możesz dać mi znać, w jaki sposób mogę sprawdzić MIME lub nazwę pliku podczas przesyłania? – orange88