2009-12-07 11 views
9

Uso la graffetta per gli allegati nella mia applicazione. Sto scrivendo uno script di importazione per una serie di vecchi dati, ma non so come creare oggetti di graffetta da file su disco. La mia prima ipotesi è quella di creare falsi oggetti multipart in CGI, ma sembra una soluzione un po 'approssimativa, e il mio tentativo iniziale è fallito, penso perché non ho capito bene il metodo to_tempfile.Importazione di vecchi dati con Rails e Paperclip

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

risposta

16

So che ho fatto la stessa cosa, e credo di aver appena creato un oggetto File dal percorso di ogni file e di assegnarlo all'attributo dell'immagine. Paperclip verrà eseguito su quel file:

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

Nota per sé, provare il la cosa più semplice che potrebbe funzionare la prossima volta. – Zak

+0

Ricordo di essere stato sorpreso quanto te. – Ben

+0

Sì - questo assolutamente scuote –

14

Questa grande opera per i file locali, ma non funziona anche per file remoti. Ho un'app che usa la graffetta per caricare immagini. Queste immagini vengono memorizzate su Amazon s3. Ad ogni modo, ho avuto un po 'di vecchi dati 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 memorizzato su s3 as stringio.txt

Se il file è più grande di circa 10 K, quindi 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 
+0

+1 Wow .. hai reso la mia giornata .. – bragboy

+0

Thx. per 'original_filename' :) –

Problemi correlati