एक्सप्रेसज फ्रेमवर्क में sendfile() विधि है। मैं पूरी ढांचे का उपयोग किए बिना ऐसा कैसे कर सकता हूं। मैं एक संग्रह बनाने के लिए नोड-देशी-ज़िप का उपयोग कर रहा हूं और मैं इसे उपयोगकर्ता को भेजना चाहता हूं।नोडज प्रतिक्रिया में फ़ाइल भेजते हैं
उत्तर
यहां एक उदाहरण प्रोग्राम है जो myfile.mp3 को डिस्क से स्ट्रीम करके भेज देगा (यानी, यह फ़ाइल भेजने से पहले पूरी फ़ाइल को स्मृति में नहीं पढ़ता है)। सर्वर पोर्ट पर सुनता 2000.
[अपडेट], टिप्पणी में @Aftershock ने उल्लेख किया util.pump
चला गया है और pipe
बुलाया स्ट्रीम प्रोटोटाइप पर एक विधि के साथ बदल दिया गया था के रूप में, नीचे दिया गया कोड इसे दर्शाता है।
var http = require('http'),
fileSystem = require('fs'),
path = require('path');
http.createServer(function(request, response) {
var filePath = path.join(__dirname, 'myfile.mp3');
var stat = fileSystem.statSync(filePath);
response.writeHead(200, {
'Content-Type': 'audio/mpeg',
'Content-Length': stat.size
});
var readStream = fileSystem.createReadStream(filePath);
// We replaced all the event handlers with a simple call to readStream.pipe()
readStream.pipe(response);
})
.listen(2000);
से http://elegantcode.com/2011/04/06/taking-baby-steps-with-node-js-pumping-data-between-streams/
आप एक जवाब में फ़ाइल (संग्रह) भेजने के लिए स्ट्रीम का उपयोग की जरूरत है लिया, और अधिक है कि क्या आप अपनी प्रतिक्रिया हेडर में उचित सामग्री-प्रकार का उपयोग करने के लिए है।
एक उदाहरण समारोह नहीं है यह करना है कि:
const fs = require('fs');
// Where fileName is name of the file and response is Node.js Reponse.
responseFile = (fileName, response) => {
const filePath = "/path/to/archive.rar" // or any file format
// Check if file specified by the filePath exists
fs.exists(filePath, function(exists){
if (exists) {
// Content-type is very interesting part that guarantee that
// Web browser will handle response in an appropriate manner.
response.writeHead(200, {
"Content-Type": "application/octet-stream",
"Content-Disposition": "attachment; filename=" + fileName
});
fs.createReadStream(filePath).pipe(response);
} else {
response.writeHead(400, {"Content-Type": "text/plain"});
response.end("ERROR File does not exist");
}
});
}
}
सामग्री प्रकार क्षेत्र के प्रयोजन के डेटा शरीर पूरी तरह से पर्याप्त है कि प्राप्त उपयोगकर्ता एजेंट एक उपयुक्त चुन सकते हैं में निहित वर्णन करने के लिए है उपयोगकर्ता को डेटा पेश करने के लिए एजेंट या तंत्र, या अन्यथा उचित तरीके से डेटा से निपटें।
"application/ओकटेट धारा" आरएफसी 2046 में "मनमाना बाइनरी डेटा" के रूप में परिभाषित किया गया है, इस सामग्री प्रकार के प्रयोजन के डिस्क को बचाया जा रहा है - यह क्या तुम सच में की जरूरत है।
"फ़ाइल नाम = [फ़ाइल का नाम]" फ़ाइल का नाम निर्दिष्ट करता है जिसे डाउनलोड किया जाएगा।
अधिक जानकारी के लिए कृपया this stackoverflow topic देखें।
- 1. नोडज
- 2. पोस्टफिक्स मेल समस्या भेजते हैं?
- 3. नोडज
- 4. लाश मेल कैसे भेजते हैं?
- 5. नोडज: एक ही प्रतिक्रिया (पाठ और छवि) के साथ विभिन्न सामग्री प्रकार कैसे लौटाते हैं?
- 6. नोडज मॉड्यूल?
- 7. आप एसओएपी अनुरोध कैसे भेजते हैं?
- 8. नोडज स्ट्रीमिंग
- 9. सेवा से गतिविधि तक प्रसारण भेजते हैं?
- 10. क्या भेजता है() सभी बफर भेजते हैं?
- 11. libcurl HTTPS पोस्ट डेटा भेजते हैं?
- 12. एचटीएमएल फॉर्म में बटन क्यों डेटा भेजते हैं?
- 13. पायथन आरटीपी पैकेट भेजते हैं और प्राप्त करते हैं
- 14. नोडज लाइब्रेरी/मॉड्यूल?
- 15. नोडज पब/उप
- 16. नोडज इन-मेमोरी स्टोरेज
- 17. एंड्रॉइड एकाधिक संपर्क भेजने के लिए एकल .vcf फ़ाइल में संलग्न हैं और मेल को भेजते हैं?
- 18. नोडज सी ++ कार्यक्रम के साथ संवाद करते हैं?
- 19. ऑब्जेक्ट्स जो खुद को भेजते हैं - एक अच्छा विचार?
- 20. प्रतिक्रिया .ashx फ़ाइल से रीडायरेक्ट
- 21. नोडज स्ट्रीम स्ट्रीम बनाम कॉलबैक
- 22. क्या डब्ल्यूएसएच (wscript) से नोडज
- 23. नोडजेस एक फ़ाइल में जेसन लिखते हैं
- 24. विंडोज़ पर नोडज ओडीबीसी कनेक्शन
- 25. मैक पर एसएसएच पर मेटा कुंजी कैसे भेजते हैं?
- 26. आप "DELETE" HTTP क्रिया के साथ अनुरोध कैसे भेजते हैं?
- 27. आप भ्रष्ट एफसीएस के साथ ईथरनेट फ्रेम कैसे भेजते हैं?
- 28. क्या सभी आईआरसी सर्वर 005 आरपीएल_आईएसपोर्ट भेजते हैं?
- 29. आप ASP.NET से बड़े पैमाने पर ईमेल कैसे भेजते हैं?
- 30. HTTP चंकित स्थानांतरण एन्कोडिंग: आप "\ r \ n" कैसे भेजते हैं?
लेकिन मैं सर्वर से एक फाइल स्ट्रीम नहीं कर रहा हूं, मैं संग्रह – andrei
बना देता हूं "स्ट्रीम" से मेरा मतलब है "कनेक्शन को फ़ाइल डेटा को पढ़ने के रूप में भेजना" जैसा कि "स्मृति में पूरी फ़ाइल को पढ़ने के विपरीत" उस डेटा को एक ही समय में कनेक्शन में भेजें "(जो सामान्य निष्पक्ष दृष्टिकोण है)। मैं _don't_ मतलब "डिस्क पर जाने के बिना स्मृति से डेटा स्ट्रीम करें।" जो पोस्ट मैंने लिंक किया है वह अधिक विस्तार से बताता है। –
ठीक है अब मैं इसे प्राप्त करता हूं, धन्यवाद। मैं वहां से शुरू करूंगा – andrei