Mam mały Rails 3.2.1 aplikacja, która wykorzystuje CarrierWave 0.5.8 do wysyłania plików do S3 (za pomocą FOG)Pobieranie plików skompresowanie, które zostały dodane do S3 z CarrierWave
chcę, aby użytkownicy mogli wybierać niektóre zdjęcia, które chcieliby pobrać, a następnie zapakuj je i wyślij im suwak. Oto co mam wymyślić:
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
To nie działa, ponieważ photo.photo.file zwraca instancję CarrierWave :: STORAGE :: Fog :: pliku zamiast zwykłego pliku.
EDIT: Błąd ten prowadzi do:
ERRNO :: ENOENT: Nie ma takiego pliku lub katalogu - uploads/zdjęcia/name.jpg
Próbowałem również:
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
Ale to daje mi 403. Pewna pomoc byłaby bardzo doceniana ... To chyba nie jest takie trudne Ja po prostu robię to Wrong ™
Z jakiego klejnotu korzystałeś? Klejnot Rubizip? –