Ruby хранит удаленные файлы в Zip с использованием RubyZip - PullRequest
2 голосов
/ 11 ноября 2011

У меня есть модель под названием Image.Изображения имеют файлы, прикрепленные с помощью Dragonfly, которые хранятся в S3.

У меня есть требование, чтобы мне нужно было сжать все изображения.

Я использую:

 Zip::ZipFile.open(tmp_zip, Zip::ZipFile::CREATE) do |zipfile|
   zipfile.add("image.jpg", image_path)      
 end

Проблема, с которой я сталкиваюсь, заключается в том, что это работает, если image_path локально.Когда вам нужно вызвать S3 для файла, image_path - это удаленный путь, такой как http://example.s3.amazonaws.com/foo/image.jpg,, и я не думаю, что есть метод RubyZip, который обрабатывает это.

IЯ спорю о записи чего-то, что создает временный файл из удаленного пути, добавляет этот временный файл в zip, а затем удаляет временный файл.

Но прежде чем я это сделаю, кто-нибудь знает, обрабатывает ли RubyZip или какая-либо другая библиотека zip архивирование удаленных файлов?Или есть лучший / более простой способ?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 15 апреля 2016

Я столкнулся с той же проблемой, и я нашел решение. Так что я делюсь этим, может кому-то помочь.

Вы можете добавить любой удаленный файл в zip, не сохраняя его во временном файле, затем прочитать его из временного файла и, наконец, удалить временный файл.

создать zip и добавить в него удаленные файлы

Zip::OutputStream.open(tmp_zip) do |zos|
   zos.put_next_entry("image.jpg")
   zos.print(URI.parse(image_url).read)    
 end

Если вы хотите добавить какие-либо локальные файлы выше temp_zip, вы можете открыть его снова:

снова откройте этот zip и добавьте любые локальные файлы, которые вы хотите

zipfile = Zip::File.open(tmp_zip)
zipfile.add("report.pdf", my_pdf_path)
zipfile.close
0 голосов
/ 11 ноября 2011

Один из вариантов - монтировать s3 локально. Существуют различные способы сделать это с помощью ftp-подобных программистов, а также есть специальные программы. Это также зависит от операционной системы, которую вы используете.

Я не вижу способа потоковой передачи почтового индекса по почтовому индексу с использованием удаленного URL.

...