2012-02-17 17 views
17

के साथ फ़ाइलों को कैसे भेजें, आप node.js/express पर फ़ाइलों को कैसे भेजते हैं।node.js

मैं रैकस्पेस क्लाउडफाइल का उपयोग कर रहा हूं और अपने रिमोट स्टोरेज में छवियां/वीडियो भेजना चाहता हूं लेकिन मुझे यकीन नहीं है कि यह फ़ाइल (fs.readFileSync()) पढ़ने के रूप में सरल है और अनुरोध निकाय में डेटा भेजता है, या है यह?

हेडर क्या होना चाहिए।

क्या होगा यदि यह दो जीबी पर एक बहुत बड़ी फाइल है?

क्या इसके लिए superagent (http://visionmedia.github.com/superagent) का उपयोग करना संभव है या फाइल भेजने के लिए एक बेहतर लाइब्रेरी है?

कृपया मुझे इसके बारे में कुछ जानकारी दें।

धन्यवाद!

उत्तर

5

मैं रैकस्पेस Cloudfiles उपयोग कर रहा हूँ और उनके दूरदराज के भंडारण के लिए छवियों/वीडियो भेजने करना चाहते हैं, लेकिन मुझे यकीन है कि यह फ़ाइल को पढ़ने के रूप में सरल है नहीं कर रहा हूँ (fs.readFileSync()) और अनुरोध शरीर में डेटा भेजने के लिए, या यह है?

आप चाहिए कभी नहीं सामान्य रूप में उपयोग fs.readFileSync। जब आप इसका उपयोग करते हैं, या somethingSync नामक किसी अन्य विधि का उपयोग करते हैं, तो आप उस कॉल की अवधि के लिए संपूर्ण सर्वर को अवरुद्ध करते हैं। केवल एक node.js प्रोग्राम में तुल्यकालिक कॉल करने के लिए स्वीकार्य समय स्टार्टअप के दौरान होता है।

हेडर क्या होना चाहिए।

RackSpace Cloud Files API देखें।

क्या इसके लिए superagent (http://visionmedia.github.com/superagent) का उपयोग करना संभव है या फाइल भेजने के लिए एक बेहतर लाइब्रेरी है?

जबकि मुझे superagent के साथ कोई अनुभव नहीं है, मुझे यकीन है कि यह ठीक काम करेगा। बस सुनिश्चित करें कि आप एपीआई दस्तावेज पढ़ते हैं और अपने अनुरोधों के अनुसार अपने अनुरोध करते हैं।

4

बड़ी फ़ाइलों के लिए, आप पाइपिंग आईओ धाराओं के साथ नोड.जेएस की अवधारणा का उपयोग करना चाहेंगे। आप स्थानीय फ़ाइल को पढ़ने के लिए खोलना चाहते हैं, HTTP अनुरोध को रैकस्पेस पर प्रारंभ करना चाहते हैं, और उसके बाद फ़ाइल रीड प्रक्रिया से डेटा इवेंट को HTTP अनुरोध प्रक्रिया में पाइप करें।

Here's an article on how to do this

सुपरगेंट छोटी फ़ाइलों के लिए ठीक है, लेकिन क्योंकि सुपरगेंट एपीआई मानता है कि अनुरोध पूरा करने से पहले आपका पूरा अनुरोध निकाय स्मृति में लोड हो गया है, यह बड़ी फ़ाइल स्थानांतरण के लिए सबसे अच्छा तरीका नहीं है।

आम तौर पर आपको विशेष रूप से अनुरोध शीर्षकों के बारे में चिंता करने की आवश्यकता नहीं होगी क्योंकि नोड की HTTP अनुरोध लाइब्रेरी आपके लिए उपयुक्त शीर्षलेख भेजती है। बस सुनिश्चित करें कि आप अपने एपीआई को जो भी HTTP विधि (शायद POST) की आवश्यकता है, और यह रैकस्पेस की तरह दिखता है, आपको अपने एपीआई टोकन के साथ X-Auth-Token अतिरिक्त शीर्षलेख जोड़ने की आवश्यकता होगी।

36
app.get('/img/bg.png', function(req, res) { 
    res.sendFile('public/img/background.png') 
}) 

http://expressjs.com/api.html#res.sendfile

उपयोग "res.sendFile"। "res.sendfile" बहिष्कृत है।

+6

एक्सप्रेस बहिष्कृत res.sendfile: res.sendFile का उपयोग करें – NuclearPeon

+0

यदि पथ को सापेक्ष होने की आवश्यकता है, तो आपको var path = requ ('path') का उपयोग करने की आवश्यकता है; router.get ('/ GetAudio', फ़ंक्शन (req, res, next) { res.sendFile (__ dirname + "/public/img/background.png"); }); – Mahesh

+0

इसका क्या मतलब है? यह सिर्फ उपनाम बना रहा है, लेकिन आप फ़ाइल को उस स्थान पर ले जा सकते थे – kim366