CarrierWave / MiniMagick no actualiza la extensión del archivo después de convertirlo.
Estoy usando MiniMagick con CarrierWave para procesar algunas imágenes en una aplicación de Rails 5.2. Mi objetivo es convertir la imagen original a jpg y crear otras dos versiones (redimensionadas).
Mi problema es que mientras que las “versiones” se procesan correctamente, el archivo original se convierte pero su extensión no se actualiza a .jpg. Por ejemplo, si paso esta imagen a través de mi cargador de archivos, obtendré las siguientes tres imágenes: placeholder-image.png, large_placeholder-image.jpg y thumb_placeholder-image.jpg (observa cómo la primera imagen, que es la original, aún tiene una extensión .png).
No puedo entender por qué ocurre esto, cualquier ayuda sería apreciada.
Código a continuación:
class PhotoUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
process convert: 'jpg'
version :large do
process resize_to_fit: [2000, 2000]
end
version :thumb do
process resize_to_fit: [500, nil]
end
end
También intenté esto, resultando en el mismo problema:
class PhotoUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
version :jpg do
process convert: 'jpg'
end
version :large, from_version: :jpg do
process resize_to_fit: [2000, 2000]
end
version :thumb, from_version: :jpg do
process resize_to_fit: [500, nil]
end
end
davy.ai
El problema parece estar en la línea
process convert: 'jpg'
del código del uploader. Está convirtiendo la imagen original al formato JPG, pero no está actualizando la extensión del archivo.Para solucionar este problema, puedes utilizar el método
extension
proporcionado por CarrierWave para actualizar la extensión del archivo original. Aquí te mostramos cómo puedes modificar tu código para lograr esto:En este código modificado, hemos agregado un método
set_content_type
que actualiza el tipo de contenido del archivo a JPEG. Esto es necesario para evitar errores de “formato de archivo incorrecto” que pueden ocurrir cuando la extensión del archivo no coincide con el formato real.También hemos anulado el método
filename
para actualizar la extensión del archivo original a.jpg
. Esto debería solucionar el problema que experimentabas con la actualización de la extensión del archivo.¡Espero que esto te ayude!