अपडेट करें
जीवन को आसान बनाने के लिए एक्सप्रेस के पास एक सहायक है।
app.get('/download', function(req, res){
const file = `${__dirname}/upload-folder/dramaticpenguin.MOV`;
res.download(file); // Set disposition and send it.
});
पुराना उत्तर
जहाँ तक आपके ब्राउज़र का संबंध है, फ़ाइल का नाम सिर्फ 'डाउनलोड' है, इसलिए आपको दूसरे HTTP हेडर का उपयोग करके इसे अधिक जानकारी देने की आवश्यकता है।
res.setHeader('Content-disposition', 'attachment; filename=dramaticpenguin.MOV');
आप इस तरह एक माइम-प्रकार भेजना चाह सकते हैं:
res.setHeader('Content-type', 'video/quicktime');
यदि आप कुछ अधिक गहराई से चाहते हैं, तो यहां जाएं।
var path = require('path');
var mime = require('mime');
var fs = require('fs');
app.get('/download', function(req, res){
var file = __dirname + '/upload-folder/dramaticpenguin.MOV';
var filename = path.basename(file);
var mimetype = mime.lookup(file);
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
res.setHeader('Content-type', mimetype);
var filestream = fs.createReadStream(file);
filestream.pipe(res);
});
आप जो चाहें वह हेडर मान सेट कर सकते हैं। इस मामले में, मैं माइम-प्रकार पुस्तकालय का उपयोग कर रहा हूं - नोड-माइम , यह जांचने के लिए कि फ़ाइल का माइम-प्रकार क्या है।
यहां ध्यान देने वाली एक और महत्वपूर्ण बात यह है कि मैंने रीडस्ट्रीम का उपयोग करने के लिए आपका कोड बदल दिया है। यह चीजों को करने का एक बेहतर तरीका है क्योंकि नाम में 'सिंक' के साथ किसी भी विधि का उपयोग करने पर इसे फेंक दिया जाता है क्योंकि नोड को अतुल्यकालिक माना जाता है।