Pregunta

Estoy usando un clip para archivos adjuntos en mi solicitud. Estoy escribiendo un script de importación para un montón de datos antiguos, pero no sé cómo crear objetos paperclip de archivos en el disco. Mi primera suposición es crear objetos de varias partes simulacro de CGI, pero que parece como un poco de una solución cruda, y mi primer intento falló, porque creo que no he tenido el método to_tempfile derecha.

¿Hay una manera correcta de hacer esto? Parece que algo que debería ser bastante fácil.

¿Fue útil?

Solución

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

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

Otros consejos

Esto funciona muy bien para los archivos locales, pero no funciona tan bien para archivos remotos. Tengo una aplicación que utiliza un clip para subir imágenes. Esas imágenes están siendo almacenados 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 mayor que alrededor de 10 km, a continuación, openuri devuelve un objeto de archivo temporal. 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top