2011-09-15 8 views
5

Usando Paperclip, quiero agarrar una imagen desde una URL como esta:Paperclip: Asignar una imagen mediante programación y establecer su nombre

require 'open-uri' 

user.photo = open(url) 

El problema es que luego termino con un nombre de fichero como 'abierto uri20110915-4852-1o7k5uw '. ¿Hay alguna manera de que pueda cambiar el nombre del archivo en user.photo?

Como un giro adicional, Paperclip está almacenando mis archivos en S3, por lo que sería aún mejor si pudiera establecer el nombre de archivo que quiero en la asignación inicial, para que las imágenes se carguen en la tecla S3 derecha. Algo como esto:

user.photo = open(url), :filename => URI.parse(url).path 

Respuesta

6

Puede escribir el nombre del archivo de nuevo a la instancia a través de:

photo.instance_write(:file_name, new_file_name) 

Así que si su URL de origen es como:

http://example.com/foo.jpg 

puede analizar primero el nombre de la URL (para obtener foo.jpg) y luego escríbala de nuevo a la instancia utilizando el método anterior instance_write.

+0

Y lo hago después de asignar 'open (url)' a la foto? Intenté esto con un usuario existente cuya foto ya está en S3. Ahora 'u.photo_file_name' devuelve el nuevo nombre, pero' u.photo (: original) 'todavía tiene la antigua url S3, así como' u.photo.path'. Y el archivo en S3 no se movió. –

+1

Si la imagen existe, es posible que deba llamar a "photo.reprocess!" para que Paperclip actualice su back-end de almacenamiento (S3). De lo contrario, lo anterior funciona antes de su primer guardado y debe guardarlo correctamente en S3 cuando finalmente se guarde –

+0

Tenga en cuenta que a veces el clip cambia el nombre del archivo para reemplazar caracteres, por lo que cualquier nombre de archivo debe coincidir con esas reglas; de lo contrario, el clip puede perderlo . – James

5
io = open(url) 
def io.original_filename; base_uri.path.split('/').last; end 

Esto configurará el nombre de archivo para el nombre de archivo en la url.

+0

Volví a este problema recientemente y tuve que adoptar algo más como este enfoque esta vez. Aquí hay una entrada en el blog sobre esto: http://www.illuminatedcomputing.com/posts/2013/06/paperclip-with-server-side-files/ –

Cuestiones relacionadas