Upload file

Ho utilizzato uno scaffold per creare una amministrazione di categorie
(vedi allegato) per l’ inserimento dei dati nel db nessun problema, poi
però volevo inserire anche un allegato (in una dir esterna). Qui non
riesco a capire la logica per realizzare il salvataggio.

mi consigliate un tutorial facile-facile da cui partire?

-Se volessi impostare come nome del file l’ ID del record come posso
recuperarlo?

-Ha senso mettere i files nel DB (anche se di grosse dimensioni?)

grazie

On Mon, Jul 28, 2008 at 10:56 AM, Aldo I. [email protected]
wrote:

Ho utilizzato uno scaffold per creare una amministrazione di categorie
(vedi allegato) per l’ inserimento dei dati nel db nessun problema, poi
però volevo inserire anche un allegato (in una dir esterna). Qui non
riesco a capire la logica per realizzare il salvataggio.

mi consigliate un tutorial facile-facile da cui partire?

qui c’è un esempio trovato con google. non l’ho provato, ma a occhio
dovrebbe funzionare.
http://www.tutorialspoint.com/ruby-on-rails/rails-file-uploading.htm

occhio però, non è possibile fare l’upload via ajax (o meglio: per
poterlo fare, ci vuole il browser giusto configurato nel modo giusto e
coi permessi giusti).

-Se volessi impostare come nome del file l’ ID del record come posso
recuperarlo?
non no capito.

-Ha senso mettere i files nel DB (anche se di grosse dimensioni?)
dipende, ci sono pro e contro. pro: devi fare solo il backup del db;
devi gestire solo i permessi del db; non devi preoccuparti di
controllare che i file siano univoci, che cioè un upload non ne
sovrascriva un altro, etc. etc. contro: ovviamente leggere e scrivere
direttamente su fs è più veloce, ma in teoria le prestazioni non
dovrebbero cambiare tantissimo, e in particolare la dimensione del
file non dovrebbe costituire grossi problemi.

qui c’� un esempio trovato con google. non l’ho provato, ma a occhio
dovrebbe funzionare.
http://www.tutorialspoint.com/ruby-on-rails/rails-file-uploading.htm

grazie, nella pausa lo guardo

occhio per�, non � possibile fare l’upload via ajax (o meglio: per
poterlo fare, ci vuole il browser giusto configurato nel modo giusto e
coi permessi giusti).

per adesso, dato che sono alle prime armi, volevo utilizzare soluzioni
semplici ajax-less

-Se volessi impostare come nome del file l’ ID del record come posso
recuperarlo?
non no capito.

in pratica vorrei mettere al posto di “mionome.jpg” “id.jpg” recuperando
l’ ID del record che è appena stato creato, ho provato con name=
category.id+".jpg" ma mi restituiisce ERROR

-Ha senso mettere i files nel DB (anche se di grosse dimensioni?)
dipende, ci sono pro e contro. pro: devi fare solo il backup del db;
devi gestire solo i permessi del db; non devi preoccuparti di
controllare che i file siano univoci, che cio� un upload non ne
sovrascriva un altro, etc. etc. contro: ovviamente leggere e scrivere
direttamente su fs � pi� veloce, ma in teoria le prestazioni non
dovrebbero cambiare tantissimo, e in particolare la dimensione del
file non dovrebbe costituire grossi problemi.

il mio dubbio è che durante ricerche o queryes particolarmente
complesse, tutti questi dati nel DB(dovranno essere immagini, ma anche
PDF di qualche Mb) diano problemi di prestazioni; ma se altre voci più
competenti della mia mi confermano il contrario vedrò allora di inserire
i files nel DB

ciao

2008/7/28 Aldo I. [email protected]:

in pratica vorrei mettere al posto di “mionome.jpg” “id.jpg” recuperando
l’ ID del record che è appena stato creato, ho provato con name=
category.id+".jpg" ma mi restituiisce ERROR

id è intero, mentre “.jpg” è stringa. prova con
name = “#{category.id}.jpg”
oppure
name = “%s.jpg” % category.id

non riesco a venirne fuori…

nessuno ha un esempio da propormi?
devo capire la logica di inserimento dove ci sia un upload file inserito
dentro uno scaffold del tipo:

text_field ----> save to database
file_field ----> save link to database + save file to filesystem

vi ringrazio

ho guardato quell’ esempio che mi sembra non sia molto diverso da quello
che ho scritto io, a parte il fatto che in quel caso viene mantenuto il
nome originario del file, mentre nel mio caso voglio che assuma l’ ID
del record, ho quindi modificato il modello:

…missing code

after_save :write_file

def write_file
name = “#{category.id}.jpg”
directory = “public/images/categories/”
# create the file path
path = File.join(directory, name)
# write the file
File.open(path, “wb”) { |f| f.write(category[‘image_url’].read) }
end

…missing code

però rimane l’ errore “undefined local variable or method `category’ for
…”

2008/7/29 Aldo I. [email protected]lid:

non riesco a venirne fuori…

continuo a non capire il problema.
prima, hai detto che il codice che hai scritto ti dava l’errore:

“undefined local variable or method `category’ for
…”

ma sto category che è? che dovrebbe essere?

Ciao Aldo, se stai solo facendo pratica va bene ma se ti serve qualcosa
ti immediatamente efficiente ti consiglio di utilizzare una soluzione
esterna come il plug in attachment_fu:
http://khamsouk.souvanlasy.com/2007/5/1/ajax-file-uploads-in-rails-using-attachment_fu-and-responds_to_parent

Grazie per il link,
sto provando sia attachment_fu che file_comlun, svolgono bene il loro
lavoro, però sinceramente volevo arrangiarmi da me e sopratutto capire
la logica di come salvare un file con Ruby.

Comunque, nell’ immediato per quello che mi serve , file_comlun si
presta molto bene, unica cosa che non ho capito come utilizzare è il
metodo url_for_file_column(“entry”, “image”) che non mi ccetta la
variabile di istanza come parametro, qualcuno l’ ha già provato ed ha
una soluzione?

Marco M. wrote:

Ciao Aldo, se stai solo facendo pratica va bene ma se ti serve qualcosa
ti immediatamente efficiente ti consiglio di utilizzare una soluzione
esterna come il plug in attachment_fu:
http://khamsouk.souvanlasy.com/2007/5/1/ajax-file-uploads-in-rails-using-attachment_fu-and-responds_to_parent

ma sto category che �? che dovrebbe essere?

l’ oggetto da cui voglio ricavare i parametri :image_url
volevo appunto capirese la sintassi che sto utilizzando è corretta

Aldo I. wrote:

Grazie per il link,
sto provando sia attachment_fu che file_comlun, svolgono bene il loro
lavoro, però sinceramente volevo arrangiarmi da me e sopratutto capire
la logica di come salvare un file con Ruby.

Comunque, nell’ immediato per quello che mi serve , file_comlun si
presta molto bene, unica cosa che non ho capito come utilizzare è il
metodo url_for_file_column(“entry”, “image”) che non mi ccetta la
variabile di istanza come parametro, qualcuno l’ ha già provato ed ha
una soluzione?

In una mio progetto ho codice di questo tipo:

Modello:

class Image < ActiveRecord::Base
file_column :image, :magick => {
:geometry => “640x480”, :versions => { “thumbnail” => “133x100” }}
end

View:

<%

in images ci sono finite tutte le immagini che voglio mostrare,

caricate

con un Image.find_all_by_etc(…)

images.each do |image|
img = image.image
%>

"> <%= image_tag url_for_image_column(img, "image", :name => "thumbnail"), :border => 0, :class => "thumb" %>
<% end %>

Nell’esempio vedi sia il link alla thumbnail che quello all’immagine a
grandezza piena (640x480, dopo il passaggio attraverso rmagick).

Ricordo che mi aveva inizialmente tratto in inganno la documetazione in
cui si leggeva url_for_file_column(“entry”, “image”) ed invece “entry”
non dev’essere una stringa, ma un’instanza del modello usato per
memorizzare le immagini.

Spero che ti risolva i problemi.

Ciao
Paolo

ciao Paolo,
nel frattempo sono riuscito a risolvere il problema,
però ne è sorto un altro: il mio webhosting non supporta la gemma
RMagick, ho a disposizione solo mini_magick.

Ho provato a cercare nel tentativo di vedere se qualcuno abbia tentato
di adattare file_column a mini_magick, ma sembra di no.

adesso sto quindi valutando attachment_fu come alternativa.

grazie ancora per la risposta.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs