У меня есть небольшое приложение Rails 3.2.1, которое использует CarrierWave 0.5.8 для загрузки файлов на S3 (используя Fog)
Я хочу, чтобы пользователи могли выбирать некоторые изображения, которые они хотели бы загрузить, а затем архивировать их и отправлять в архив. Вот что я придумала:
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
Это не работает, потому что photo.photo.file возвращает экземпляр CarrierWave :: Storage :: Fog :: File вместо обычного файла.
РЕДАКТИРОВАТЬ: ошибка, которая приводит к:
Errno :: ENOENT: Нет такого файла или каталога - uploads / photos / name.jpg
Я также попробовал следующее:
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
Но это дает мне 403. Некоторая помощь будет принята с благодарностью. Возможно, это не так сложно, я просто делаю это неправильно ™