Domanda

Sto usando graffetta per gli allegati nella mia applicazione. Sto scrivendo uno script di importazione per un mucchio di vecchi dati, ma non so come creare oggetti graffetta da file su disco. La mia prima risposta è quella di creare finto CGI oggetti più parti, ma che sembra un po 'di una soluzione grezza, e il mio primo tentativo fallito, credo perché non ho avuto il metodo to_tempfile destra.

C'è un modo giusto per fare questo? Sembra qualcosa che dovrebbe essere abbastanza facile.

È stato utile?

Soluzione

Lo so che ho fatto la stessa cosa, e credo che ho appena creato un oggetto file dal percorso per ogni file, e assegnato all'attributo immagine. Paperclip verrà eseguito su quel file:

thing.image = File.new("/path/to/file.png")
thing.save

Altri suggerimenti

Questa grande opera per i file locali, ma non funziona anche per file remoti. Ho un app che utilizza graffetta per il caricamento di immagini. Quelle immagini sono sempre memorizzate su Amazon S3. Ad ogni modo, ho avuto alcuni dati vecchi che avevo bisogno di importare così ho provato quanto segue:

thing.image = open('http://www.someurl.com/path/to/image.jpg')
thing.save

Se il file è di piccole dimensioni (ad esempio, meno di 10K) poi openuri restituisce un oggetto StringIO e il mio file otterrebbe memorizzati su S3 come stringio.txt

Se il file è più grande di 10K in giro, poi openuri restituisce un oggetto tempfile. Ma il nome del file su S3 finisce per essere unico, ma non proprio in relazione al nome del file originale di image.jpg

Sono stato in grado di risolvere il problema nel modo seguente:

remote_photo = open('http://www.someurl.com/path/to/image.jpg')
def remote_photo.original_filename;base_uri.path.split('/').last; end   
thing.image = remote_photo
thing.save
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top