2008-10-25 20 views
5

मैं एक अपलोड की गई ज़िप फ़ाइल निकालने और डेटाबेस में अपनी सामग्री को स्टोर करने की कोशिश कर रहा हूं, प्रति फ़ाइल एक प्रविष्टि। रूबीज़िप लाइब्रेरी में लगभग कोई उपयोगी दस्तावेज नहीं है।rubyzip लाइब्रेरी का उपयोग करके मुझे ज़िप फ़ाइल की सामग्री कैसे प्राप्त हो सकती है?

एक संपत्ति तालिका है जिसमें कुंजी है: स्ट्रिंग (फ़ाइल का नाम) और डेटा: बाइनरी (फ़ाइल सामग्री)।

मैं 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

9

एक और भी अधिक आसान तरीका मिल गया:

asset.data = entry.get_input_stream.read 
संबंधित मुद्दे

 संबंधित मुद्दे