2012-07-17 6 views
1

디렉토리의 모든 파일을 압축하려고 시도 할 때 RubyZip을 사용하고 있습니다. 여기 내 클래스의 :디렉토리의 모든 파일 압축하기

require 'zip/zip' 
require 'zip/zipfilesystem' 

class Lesson < ActiveRecord::Base 
    attr_accessible :attachment, :course_id, :goal, :title, :assets_attributes 
    belongs_to :course 
    has_many :assets, :dependent => :destroy 
    accepts_nested_attributes_for :assets, :reject_if => lambda { |a| a[:asset_file_name].blank? } 

    def bundle 
    bundle_filename = "public/attachments/#{self.id}/#{self.id}.zip" 

    Zip::ZipFile.open(bundle_filename, Zip::ZipFile::CREATE) { 
    |zipfile| 
     Dir.foreach("public/attachments/#{self.id}") do |item| 
     zipfile.add(item, "public/attachments/") 
     end 
    } 

    File.chmod(0644, bundle_filename) 
    self.save 
    end 
end 

현재이 내가 원하는 이름으로 ZipFile를 만드는 것입니다,하지만 디렉토리에있는 파일이 제대로 압축되지 않습니다. 그들은 파일로 압축되지 않고 디렉토리로 압축됩니다.

+0

좀 더 자세한 정보를 제공 할 수 있습니까? 예상되는 출력은 무엇이고 실제로 얻는 것은 무엇입니까? * "... 파일로 압축되지만 디렉토리로 ..."*는 몇 가지 방법으로 해석 될 수 있으므로 명확히하십시오. –

답변

1

당신이 리눅스 서버에서 실행하는 경우 unix_utils을 시도 할 수 :

tmp_filename = UnixUtils.zip "public/attachments/#{self.id}" 
bundle_filename = "public/attachments/#{self.id}/#{self.id}.zip" 
FileUtils.mv tmp_filename, bundle_filename 
File.chmod 0644, bundle_filename 

첫 번째 줄은 tmp 디렉토리에있는 파일 (tmp_filename)에 public/attachments/#{self.id} 모든 것을 참아 요. 그런 다음이 파일을 이동하여 bundle_filename으로 이름을 바꿉니다.

+0

내가 의미하는 것은 그것이 시도 된 메인 디렉토리에서 압축 된 파일명으로 dir을 생성한다는 것이다. 예를 들어, dir에 readme.txt라는 파일이있는 경우 "readme.txt"라는 zip 파일이 의도 한 텍스트 파일이 아닌 폴더로 추가됩니다. –

관련 문제