2009-12-07 6 views
9

Estoy usando paperclip para archivos adjuntos en mi aplicación. Estoy escribiendo un script de importación para un montón de datos antiguos, pero no sé cómo crear objetos paperclip a partir de archivos en el disco. Mi primera suposición es crear objetos CGP multiparte falsos, pero parece una solución un tanto cruda, y mi intento inicial falló, creo que porque no obtuve el método to_tempfile correcto.Importación de datos antiguos con Rails y Paperclip

¿Hay una forma correcta de hacerlo? Parece algo que debería ser bastante fácil.

Respuesta

16

Sé que he hecho lo mismo, y creo que acabo de crear un objeto File desde la ruta a cada archivo, y se lo asignó al atributo de la imagen. Paperclip se ejecutará en ese archivo:

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

Nota al uno mismo, probar el lo más simple que podría funcionar la próxima vez. – Zak

+0

Recuerdo estar tan sorprendido como tú. – Ben

+0

Sí - esto absolutamente rocas –

14

Esto funciona muy bien para los archivos locales, pero no funciona tan bien para los archivos remotos. Tengo una aplicación que usa un clip para cargar imágenes. Esas imágenes se están almacenando en Amazon s3. De todos modos, tuve algunos datos antiguos que tenía que importar lo que intentado el siguiente:

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

Si el archivo es pequeño (por ejemplo, menos de 10 K), entonces openuri devuelve un objeto StringIO y mi archivo obtendría almacenada en s3 como stringio.txt

Si el archivo es más grande que alrededor de 10K, entonces openuri devuelve un objeto TempFile. Sin embargo, el nombre del archivo en S3 termina siendo único, pero no realmente en relación con el nombre del archivo original de imagen.jpg

yo era capaz de solucionar el problema de la siguiente manera:

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 ... usted hizo mi día ... – bragboy

+0

Thx. para 'original_filename' :) –

Cuestiones relacionadas