2012-07-25 4 views
12

Sto sviluppando un'applicazione Ruby on Rails che richiede il caricamento/il download di file. Per la parte di upload ho usato la gemwave portante perché è molto facile da usare e flessibile. Il problema è: una volta caricato il file, ho bisogno di sapere alcune cose: se è un pdf invece di scaricare il file lo mostro in linea, e lo stesso vale per un'immagine. Come ottengo l'estensione e come posso farlo a inviare il file a un utente ?? Qualsiasi commento è apprezzato Grazie !!Carrierwave come ottenere l'estensione del file

risposta

30

Determinare estensione del file (suppongo un nome per uploader montato è 'file'):

file = my_model.file.url 
extension = my_model.file.file.extension.downcase 

quindi preparare il mimo e la disposizione vars:

disposition = 'attachment' 
mime = MIME::Types.type_for(file).first.content_type 

if %w{jpg png jpg gif bmp}.include?(extension) or extension == "pdf" 
    disposition = 'inline' 
end 

(aggiungere altre estensioni, se si desidera) .

E poi inviare il file:

send_file file, :type => mime, :disposition => disposition 
+0

Grazie mille, mi piace lo stile della tua soluzione e ha funzionato perfettamente. Di nuovo, grazie per la risposta!! – Wiggin

+0

dove esattamente nei file di progetto delle rotazioni si posizionano la disposizione e il tipo MIME delle vars? – maumercado

2

Una volta caricato un file, il nome viene memorizzato nel database. Questo include anche l'estensione. Supponendo di avere un modello User con un uploader montato come asset, allora si può ottenere come:

user.asset.file.extension 

Per quanto riguarda l'invio all'utente, se si chiama user.asset_url, che vi darà l'URL in cui il file è caricato. L'utente può utilizzare quel link per ottenere il file. O sto fraintendendo cosa intendi con "invia il file ad un utente"?

+0

Grazie per la risposta !! beh, voglio fare in modo che l'utente scarichi il file. Sai, scarica la finestra di dialogo (apri con .. oppure mantienilo o in caso di chrome keep o reject.) Pensavo che con un semplice send_file con parametri sarebbe stato tutto ok. – Wiggin

+0

Bene, basta collegarsi al file allora. Puoi ottenere l'url con 'user.asset_url'. –

+0

Sì, l'ho fatto! i tuoi consigli hanno funzionato perfettamente, grazie mille !! – Wiggin