जवाबों:
यहां एक उदाहरण कार्यक्रम है जो 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");
}
});
}
}
सामग्री-प्रकार फ़ील्ड का उद्देश्य शरीर में निहित डेटा का पूरी तरह से वर्णन करना है कि प्राप्त करने वाला उपयोगकर्ता एजेंट उपयोगकर्ता को डेटा प्रस्तुत करने के लिए एक उपयुक्त एजेंट या तंत्र चुन सकता है, या अन्यथा उचित तरीके से डेटा से निपट सकता है।
"एप्लिकेशन / ऑक्टेट-स्ट्रीम" को RFC 2046 में "मनमाना द्विआधारी डेटा" के रूप में परिभाषित किया गया है, इस सामग्री-प्रकार का उद्देश्य डिस्क को सहेजना है - यह वही है जो आपको वास्तव में चाहिए।
"फ़ाइल नाम = [फ़ाइल का नाम]" फ़ाइल का नाम निर्दिष्ट करता है जिसे डाउनलोड किया जाएगा।
अधिक जानकारी के लिए कृपया इस स्टैकओवरफ़्लो विषय को देखें ।