2013-05-16 6 views
6

पर बाइनरी फ़ाइल अपलोड करना मैं फ़्लैश को रिकॉर्ड करने और ऑडियो को नोड सर्वर पर अपलोड करने के लिए उपयोग कर रहा हूं। फ्लैश क्लाइंट jrecorder का एक भिन्नता है। जब उपयोगकर्ता रिकॉर्डिंग किया जाता है तो ऑडियो पोस्ट अनुरोध के डेटा के रूप में ऑडियो ByteArray के साथ POST अनुरोध (एक फॉर्म नहीं है क्योंकि फ्लैश फाइल नहीं बना सकता) का उपयोग करके अपलोड किया जाता है (here देखें)।Node.js

मैं नीचे दिए गए कोड का उपयोग करके नोड-भूमि पर फ़ाइल को सही ढंग से प्राप्त करने में सक्षम हूं लेकिन बाहर आने वाला ऑडियो उलझन में है और आप कुछ भी नहीं सुन सकते हैं। इसके साथ ही, फ़ाइल की सामग्री वीएलसी द्वारा खेला जा सकता है और अन्य खिलाड़ी + सॉक्स इसे एमपी 3 के रूप में एन्कोड करने में सक्षम है।

var express = require('express'); 
var app = express(); 

app.use (function(req, res, next) { 
    req.rawBody = ''; 
    req.setEncoding('utf8'); 

    if(req.method.toLowerCase() == "post") 
    { 
     req.on('data', function(chunk) { req.rawBody += chunk }); 
     req.on('end', function() { done(req, res); }); 
    } 

    next(); 
}); 

function done(req, res) 
{ 
    fs.writeFile('abc.wav', req.rawBody, 'binary', function(err){ 
     if (err) throw err; 

     // Save file to S3 
    } 
} 

अब अगर मैं एक ही फ्लैश ग्राहक का उपयोग और एक रेल सर्वर से पोस्ट अनुरोध बनाने के लिए और नीचे दिए गए कोड का उपयोग फ़ाइल पूरी तरह से सहेजा जाता है,:

यहाँ मेरी कोड जब नोड का उपयोग कर रहा है।

def record 
    file = request.raw_post 

    # Save file to S3 
end 

नोट है कि मैं एक नोड विशेषज्ञ तो कृपया अगर तुम मुझे क्या बजाय मात्रा को बचाने के उपयोग करना चाहिए पर कोई सुझाव कोड उदाहरण पोस्ट कृपया नहीं हूँ। मेरा मुख्य उद्देश्य अभी नोड में और अधिक कुशलता से पूरा करने की अन्य तरीके की खोज से पहले एक काम कर राज्य को यह प्राप्त करने के लिए (बफ़र्स, आदि धाराओं,) है

उत्तर

16

req.setEncoding('utf8'); 

तुम नहीं हो निम्न पंक्ति बाहर ले utf8 डेटा प्राप्त करने के लिए, आपको binary डेटा प्राप्त हो रहा है।

आप एक स्ट्रिंग के बजाय एक बफर का उपयोग कर

app.use(function(req, res, next) { 
    var data = new Buffer(''); 
    req.on('data', function(chunk) { 
     data = Buffer.concat([data, chunk]); 
    }); 
    req.on('end', function() { 
    req.rawBody = data; 
    next(); 
    }); 
}); 
+1

प्रिय महोदय आप कमाल कर रहे हैं बेहतर होगा! यह काम किया, धन्यवाद! मुझे विश्वास नहीं है कि मैं उस रेखा को याद करता हूं। यह आज मैंने कोशिश की कई पुनरावृत्तियों में से एक था। एक बार फिर धन्यवाद! –

+0

महान उत्तर के लिए धन्यवाद! मुझे इसके साथ बहुत सारी समस्याएं थीं और मुझे समझ में नहीं आया कि यह एक्सप्रेस द्वारा डिफ़ॉल्ट रूप से कार्यान्वित नहीं किया जा सकता है, लेकिन एनवीएम। धन्यवाद! –

+0

thx आदमी मेरे लिए काम करता है – cloverink