Upload file tramite Ruby on Rails
Programmazione, Web, Ruby on Rails Aprile 19th, 2007Dopo una serie di articoli riguardanti il mondo “Java“, ho pensato che forse era meglio prendere una boccata d’aria fresca e parlare di qualcosa di più Esotico, tipo il framework ruby on rails.
Durante lo sviluppo di qualche mini applicazione web in rails (puramente a scopo “didattico”) ho riscontrato qualche problemino durante il caricamento di file.
Qui di seguito ho definito i principali passi per permettere l’upload di un file
Ipotizziamo di voler aggiungere un immagine all’interno della sezione “clients“, memorizzando su DB (colonna img) il nome del file caricato e salvando il file vero e proprio in /public/images
Pagina .rhtml:
<form action=”/clients/create” method=”POST” enctype=”multipart/form-data” />
…..
<%= file_field ‘client’, ‘img’ %></p>
<%= submit_tag “Create” %>
All’interno del controller clients_controller.rb, metodo create:
def create
@client = Client.new(params[:client])
#Upload file, salvataggio in public/images/…
File.open(”#{RAILS_ROOT}/public/images/#{@params[’client’][’img’].original_filename()}”, “wb”) do |f|
f.write(@params[’client’][’img’].read)
end
@client.img = @params[’client’][’img’].original_filename()
…..
end
Se le vostre esigenze prevedono una serie di operazioni e/o controlli sul file caricato vi consiglio il modulo “FileColumn“, realizzato da Sebastian Kanthak, che integra la libreria RMagick per manipolare immagini et similia.
Tanto per darvi un piccolo assaggio di ciò che è possibile fare con poche righe di codice, guardate come è possibile salvare sul filesystem l’immagine ridimensionata:
(Nota è importate modificare l’Active Record)
class Entry < ActiveRecord::Base
file_column :img, :magick => { :geometry => “640×480>” }
end
pagina .rhtml
<%= file_column_field “client”, “img” %>
… e se volessi salvare una versione a 640×480 e anche un’anteprima a 50×50? easy:
class Entry < ActiveRecord::Base
file_column :img, :magick => {
:versions => { “thumb” => “50×50″, “medium” => “640×480>” } }
end
Gennaio 28th, 2009 at 19:05
Ciao,
Ho necessità di usare qualcosa di simile. Ho seguito alcuni tutorial; L’unico problema che non riesco a superare è l’edit in caso volessi rivedere i dati.
Hai esperienza a riguardo?
Grazie
Fabio