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

現在、これは希望する名前の zip ファイルを作成していますが、ディレクトリ内のファイルが正しく圧縮されていません。それらはファイルとして圧縮されているのではなく、ディレクトリとして圧縮されています。

4

1 に答える 1

1

Linux サーバーで実行している場合は、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 ディレクトリpublic/attachments/#{self.id}のファイル ( ) に圧縮します。tmp_filename次に、このファイルを に移動して名前を変更しますbundle_filename

于 2012-07-17T15:15:15.097 に答える