मैं NodeJS में नया हूँ। मुझे पता है कि हम पाइप () विधि का उपयोग करके क्लाइंट को डेटा स्ट्रीम कर सकते हैं।

यहाँ कोड का टुकड़ा है

 router.get('/archive/*', function (req, res) {

        var decodedURI = decodeURI(req.url);
        var dirarr = decodedURI.split('/');
        var dirpath = path.join(dir, dirarr.slice(2).join("/"));
        console.log("dirpath: " + dirpath);
        var archive = archiver('zip', {
            zlib: {level: 9} // Sets the compression level.
        });
        archive.directory(dirpath, 'new-subdir');
        archive.on('error', function (err) {
            throw err;
        });
        archive.pipe(res)
        archive.on('finish', function () {
            console.log("finished zipping");
        });
        archive.finalize();

    });

जब मैं एक प्राप्त अनुरोध का उपयोग करता हूं तो ज़िप की गई फ़ाइल डाउनलोड हो जाती है लेकिन बिना किसी एक्सटेंशन के। मुझे इसकी जानकारी है क्योंकि मैं प्रतिक्रिया में एक राइटस्ट्रीम पाइप कर रहा हूं। क्या वैसे भी इसे .zip एक्सटेंशन के साथ पाइप किया जाता है? या मैं ज़िप फ़ाइल को HDD में बनाए बिना ज़िप फ़ाइल कैसे भेज सकता हूँ?

0
NIKHIL C M 2 जुलाई 2017, 16:25

2 जवाब

सबसे बढ़िया उत्तर

पाइपिंग से पहले हेडर बदलने का एक तरीका है,

res.setHeader("Content-Type", "application/zip");
res.setHeader('Content-disposition' ,'attachment; filename=downlaod.zip');

दिए गए कोड के लिए,

router.get('/archive/*', function (req, res) {
        var decodedURI = decodeURI(req.url);
        var dirarr = decodedURI.split('/');
        var dirpath = path.join(dir, dirarr.slice(2).join("/"));
        var output = fs.createWriteStream(__dirname + '/7.zip');
        var archive = archiver('zip', {
            zlib: {level: 9} // Sets the compression level.
        });
        archive.directory(dirpath, 'new-subdir');
        archive.on('error', function (err) {
            throw err;
        });
        res.setHeader("Content-Type", "application/zip");
        res.setHeader('Content-disposition' ,'attachment; filename=downlaod.zip');
        archive.pipe(res);
        archive.finalize();

    });
1
NIKHIL C M 2 जुलाई 2017, 17:09

आप दोनों का फ़ाइल नाम सेट करने के लिए res.attachment() का उपयोग कर सकते हैं डाउनलोड, और इसके माइम-प्रकार भी:

router.get('/archive/*', function (req, res) {
  res.attachment('archive.zip');
  ...
});
1
robertklep 2 जुलाई 2017, 16:33