Necesito copiar un archivo de un objeto de onda portadora a otro. Son diferentes tablas y diferentes tipos de cargadores.¿Cuál es la forma correcta de copiar un archivo de onda transportadora de un registro a otro?
Empecé con:
user.avatar = image.content
(donde el usuario y la imagen son instancias de modelo, avatar y el contenido se la carrierwave montado uploaders) que funcionaba a veces. Parece funcionar todo el tiempo localmente, con un almacenamiento de archivos, pero intermitente cuando se usa niebla y s3.
En un mailing list post me encontré con este código:
user.avatar = image.content.file
que colaboró de nuevo a veces.
Mi solución de trabajo hasta ahora es:
require "open-uri"
begin
user.avatar = open(image.url)
rescue Errno::ENOENT => e
begin
user.avatar = open(image.path)
rescue Errno::ENOENT => e
# Ok, whatever.
end
end
que no sólo es feo, pero que no logra pasar la validación de extensión debido a la apertura de un archivo remoto no mantiene la extensión (jpg, gif, etc. .).
¿Tiene imagen image.content.url? No estoy seguro de que esto funcione, ya que avatar tiene muchas versiones con diferentes procesos que necesitan un archivo local para funcionar, y no quiero que ambos registros apunten al mismo archivo, quiero una copia del archivo. – Pablo
La forma en que funciona remote_blah_url es que esencialmente "descarga" el archivo de esa URL y lo vuelve a procesar. Ver http://stackoverflow.com/questions/5007575/how-to-assign-a-remote-file-to-carrierwave, por ejemplo. – Ibrahim
No funciona si la imagen no se sirve a través de HTTP. Obtendrá el siguiente error: 'Icono que intenta descargar un archivo que no se sirve en HTTP' – Pioz