2008-10-25 8 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를에서 데이터를 설정할 수 있습니까? 임시 파일을 사용해야합니까?

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

내가 어떻게 그 확실하지 않다 :이 방법으로 항목을 저장할 수

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

또는 :

답변

6

당신이이 같은 read_local_entry 방법을 사용할 수 있습니다 것으로 보인다 제대로 작동하지만 어쩌면 올바른 방법을 찾는데 도움이 될 것입니다 (그렇지 않은 경우).

그리고, 또 하나 개의 대안 : 훨씬 더 간단한 방법을 찾을 수

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

감사합니다. 노력 10 점! – jcoby

9

:

asset.data = entry.get_input_stream.read