tengo una pequeña Rails 3.2.1 aplicación que utiliza CarrierWave 0.5.8 para la carga de archivos a S3 (FOG) utilizandoarchivos de comprimir Descarga y que fueron subidos a S3 con CarrierWave
Quiero que los usuarios puedan seleccionar algunas imágenes que les gustaría descargar, luego comprimirlas y enviarles un zip. Esto es lo que he llegado con:
def generate_zip
#A collection of Photo objects. The Photo object has a PhotoUploader mounted.
photos = Photo.all
tmp_filename = "#{Rails.root}/tmp/" << Time.now.strftime('%Y-%m-%d-%H%M%S-%N').to_s << ".zip"
zip = Zip::ZipFile.open(tmp_filename, Zip::ZipFile::CREATE)
zip.close
photos.each do |photo|
file_to_add = photo.photo.file
zip = Zip::ZipFile.open(tmp_filename)
zip.add("tmp/", file_to_add.path)
zip.close
end
#do the rest.. like send zip or upload file and e-mail link
end
Esto no funciona porque photo.photo.file devuelve una instancia de CarrierWave :: Almacenamiento :: :: Niebla archivo en lugar de un archivo normal.
EDIT: El error esto conduce a:
Errno :: ENOENT: No existe el fichero o directorio - uploads/fotos/name.jpg
También trataron los siguientes:
tmp_filename = "#{Rails.root}/tmp/" << Time.now.strftime('%Y-%m-%d-%H%M%S-%N').to_s << ".zip"
zip = Zip::ZipFile.open(tmp_filename, Zip::ZipFile::CREATE)
zip.close
photos.each do |photo|
processed_uri = URI.parse(URI.escape(URI.unescape(photo.photo.file.authenticated_url)).gsub("[", "%5B").gsub("]", "%5D"))
file_to_add = CarrierWave::Uploader::Download::RemoteFile.new(processed_uri)
zip = Zip::ZipFile.open(tmp_filename)
zip.add("tmp/", file_to_add.path)
zip.close
end
Pero esto me da un 403. Algo de ayuda sería muy apreciada ... Probablemente no es tan difícil Solo lo estoy haciendo mal
¿Qué gema estabas usando? Rubyzip joya? –