2010-09-10 11 views
5

मेरे पास एक रेल एप्लिकेशन है जहां लोग WAV फाइलें बनाने और सर्वर पर अपलोड करने के लिए ब्राउज़र ध्वनि संपादक में उपयोग कर सकते हैं।पेपरक्लिप के साथ एक डब्ल्यूएवी फ़ाइल अपलोड करें और दोनों .wav और .mp3 संस्करणों को स्टोर करें

मैं ध्वनि फ़ाइल अपलोड को संभालने के लिए पेपरक्लिप का उपयोग करता हूं।

मैं wav फ़ाइल को एमपी 3 में कनवर्ट करने में सक्षम होना चाहता हूं, लेकिन दोनों फाइलें रखें।

मैंने पेपरक्लिप प्रोसेसर के बारे में पढ़ा है, लेकिन मुझे यकीन नहीं है कि दोनों फ़ाइलों को केवल एमपी 3 में परिवर्तित करने के बजाय उन्हें कैसे उपयोग करें।

उत्तर

7

ठीक है, यह शायद इष्टतम नहीं है लेकिन यह बहुत अच्छी तरह से काम करता है। मैंने एमपी 3 के लिए अपने Sound कक्षा में एक और लगाव जोड़ दिया, और इसमें before_validation फ़िल्टर को जोड़ने के लिए जोड़ा। इसके अतिरिक्त, चूंकि मेरे पास कुछ मौजूदा WAV अनुलग्नक थे, इसलिए मैंने मौजूदा रिकॉर्ड माइग्रेट करने के लिए reconvert_to_mp3 विधि बनाई है।

has_attached_file :mp3, 
    :storage => :s3, 
    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml", 
    :path => "sounds/:id/:style.:extension" 

before_validation :convert_to_mp3 

def reconvert_to_mp3 
    wavfile = Tempfile.new(".wav") 
    wavfile.binmode 

    open(wav.url) do |f| 
    wavfile << f.read 
    end 

    wavfile.close 

    convert_tempfile(wavfile) 
end 

def convert_to_mp3 
    tempfile = wav.queued_for_write[:original] 

    unless tempfile.nil? 
    convert_tempfile(tempfile) 
    end 
end 

def convert_tempfile(tempfile) 
    dst = Tempfile.new(".mp3") 

    cmd_args = [File.expand_path(tempfile.path), File.expand_path(dst.path)] 
    system("lame", *cmd_args) 

    dst.binmode 
    io = StringIO.new(dst.read) 
    dst.close 

    io.original_filename = "sound.mp3" 
    io.content_type = "audio/mpeg" 

    self.mp3 = io 
end 
+0

नीचे 'dst.unlink' नहीं होना चाहिए? या पेपरक्लिप इसे पकड़ने से पहले फ़ाइल को हटा देगा? – user1618143

+0

@daniel समाधान के लिए धन्यवाद यह महान काम कर रहा है। लेकिन मुझे उत्पादन मोड में कुछ समस्या का सामना करना पड़ रहा है। त्रुटि निम्नानुसार है: 'एमपी 3 इनपुट फ़ाइल में हेडर पढ़ने में त्रुटि' क्या आप कृपया इसके साथ मेरी मदद कर सकते हैं? बहुत बहुत धन्यवाद। – Vishal

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