2011-02-17 12 views
6

अनुरोध पर संपीड़ित फ़ाइलों को कैसे उत्पन्न करें।रेल 3: मैं अनुरोध पर संकुचित फाइल कैसे उत्पन्न करूं

मैं इस नियंत्रक

def create  
    send_data generate_tgz("#{RAILS_ROOT}/tmp/example.txt"), :filename => 'export.tgz'  
end 

है लेकिन यह मुझे generate_tgz पर नहीं मिला एक विधि देता है।

क्या यह एक प्लगइन या मणि है? क्या मुझे कुछ भी चाहिए? क्या मैं इसके बजाय एक ज़िप फ़ाइल उत्पन्न कर सकता हूं?

संपादित करें:

def generate_tgz(file) 
    system("tar -czf #{RAILS_ROOT}/tmp/export-result #{RAILS_ROOT}/tmp/export") 
    content = File.read("#{RAILS_ROOT}/tmp/export-result") 
    #ActiveSupport::Gzip.compress(content)  
end 

यह एक tgz बनाता है, लेकिन जब मैं यह संपीड़न हटाने मैं एप्लिकेशन/c3ec2057-7d3a-40d9-9a9d-d5c3fe3ffd6f/घर/tmp/निर्यात/and_the_files

मैं करूंगा जैसे ही यह होना चाहिए: export/the_files

+0

क्या आप इस पृष्ठ पर दिए गए उदाहरण के बारे में बात कर रहे हैं http://api.rubyonrails.org/classes/ActionController/Streaming.html? मुझे नहीं लगता कि रेल में लागू ऐसी कोई विधि है। यह सिर्फ एक उदाहरण था। – Dogbert

+0

@ डोगबर्ट: हाँ, यह उदाहरण है। – Nerian

उत्तर

3

विधि मौजूद नहीं है। आप आसानी से इसे ActiveSupport::Gzip का उपयोग कर बना सकते हैं।

def generate_tgz(file) 
    content = File.read(file) 
    ActiveSupport::Gzip.compress(content) 
end 
+0

अच्छा! केवल एक चीज जिसे मैं बदलना था: filename => 'export.tgz' से: filename => 'export.zip'। और मैं कई फाइलों को एक में कैसे बंडल करूं? – Nerian

+0

एक बार में कई फाइलों को बंडल करने के लिए आपको एक संग्रह बनाने की आवश्यकता है। रेल डिफ़ॉल्ट रूप से इसका समर्थन नहीं करते हैं। –

+0

मैं एक संग्रह बनाने के लिए एक खोल कॉल का उपयोग करने में कामयाब रहा। अब यह अच्छी तरह से काम करता है, सिवाय इसके कि यह एक गैर-अनुकूल निर्देशिका पदानुक्रम बनाता है। संपादन की जांच करें। – Nerian

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