2008-10-25 95 views
5

我試圖提取上傳的zip文件並將其內容存儲在數據庫中,每個文件一個條目。 rubyzip庫幾乎沒有有用的文檔。如何使用rubyzip庫獲取壓縮文件的內容?

有一個資產表具有key:string(文件名)和data:binary(文件內容)。

我使用rubyzip庫,並儘可能使其爲這樣:

Zip::ZipFile.open(@file_data.local_path) do |zipfile| 
    zipfile.each do |entry| 
    next if entry.name =~ /__MACOSX/ or entry.name =~ /\.DS_Store/ or !entry.file? 

    asset = self.assets.build 
    asset.key = entry.name 
    asset.data = ?? # what goes here? 
    end 
end 

我如何設置從ZipEntry的數據?我必須使用臨時文件嗎?

回答

6

這似乎是你可以使用read_local_entry方法是這樣的:

asset.data = entry.read_local_entry {|z| z.read } 

或者,你可以保存這個方法的條目:

data = entry.extract "#{RAILS_ROOT}/#{entry.name}" 
asset.data = File.read("#{RAILS_ROOT}/#{entry.name}") 

我不知道如何將這些將工作,但也許他們會幫助你找到正確的方法(如果不是這樣)。

而且,多了一個選擇:

asset.data = zipfile.file.read(entry.name) 
+0

感謝。努力10分! – jcoby 2008-10-25 18:59:44

9

找到一個更簡單的方法:

asset.data = entry.get_input_stream.read 
相關問題