2012-06-23 2 views
4

Я хочу загрузить фотографии с моего сайта после zipping. Я использую rubyZip gem, но не могу зашифровать удаленные файлы. Ниже приведен сценарий:rubyZip Gem: хотите заархивировать удаленные файлы в RoR

Я пытаюсь заархивировать содержимое с сервера. Содержание что-то вроде этого

http://myApplication.s3.amazonaws.com/xxxxxxxx/image/image1.jpeg,

Таким образом, в "zipfile.add (attachment.document_file_name, attachment.document.url)", я назначен следующие значения:

document_file_name = image1.jpeg/image2 .jpeg/image3.jpeg document.URL = http://myApplication.s3.amazonaws.com/xxxxxxxx/image

Теперь здесь я получаю следующее сообщение об ошибке:

Нет такого файла или каталога - myApplication.s3.a mazonaws.com/xxxxxxxx/image

Этот драгоценный камень отлично работает, если я заархивировал файлы из локальной файловой системы (например:/home/user/images), но не для удаленных файлов.

Я что-то не так? Кто-нибудь может мне помочь? Или любой другой камень, который может это сделать?

Спасибо, -Tahniyat

+0

Смотрите эту библиотеку: https://github.com/fringd/zipline – iwasrobbed

ответ

8

Что вы можете сделать, это прочитать его первый из s3 писать непосредственно в файл архива (поместить архивный файл на свой временный каталог), служат его затем удалить временный файл архива. Вот небольшой отрывок:

require 'zip/zip' 

    s3 = Aws::S3.new(S3_KEY, S3_SECRET) 
    bucket_gen = Aws::S3Generator::Bucket.create(s3, S3_BUCKET) 
    archive_file = "#{Rails.root}/tmp/archive.zip" 

    Zip::ZipOutputStream.open(archive_file) do |zos| 
    list_of_files_to_loop.each do |file| 
     filename = file.filename 
     url = "#{S3_PATH}/#{filename}" 

     signed_url = bucket_gen.get(URI.unescape(URI.parse(URI.escape(url)).path[1..-1]), 1.minute) 

     zos.put_next_entry(filename) # Give it next file a filename 
     zos.print(URI.parse(signed_url).read) # Add file to zip 
    end 
    end # Write zip file 

    # TODO: Serve file 
    # TODO: Delete archived file from tmp directory 

Ссылка: http://rubyzip.sourceforge.net/classes/Zip/ZipOutputStream.html

+2

Новый Zip синтаксис для этого будет: 'Zip :: OutputStream .open (...) ' –

+0

И вам нужно только« потребовать »zip'', вместо' require 'zip/zip''. См. Http://stackoverflow.com/questions/5997539/using-rubyzip-error-no-such-file-to-load-zip-zip – talyric

+0

Если это не сработает, добавьте этот драгоценный камень: «zip-zip». Работает на меня. – Abel

Смежные вопросы