简体   繁体   中英

Node.js send file to client

Hello there I have been trying to send a file from node.js to the client.

My code works however when the client goes to the specified url ( /helloworld/hello.js/test ) it streams the file.

Accessing it from Google Chrome makes the file (.mp3) play in a player.

My goal is to have the client's browser download the file and ask the client where he wants to store it, not stream it on the website.

http.createServer(function(req, res) {
    switch (req.url) {
        case '/helloworld/hello.js/test':

            var filePath = path.join(__dirname, '/files/output.mp3');
            var stat = fileSystem.statSync(filePath);

            res.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.on('open', function() {
                // This just pipes the read stream to the response object (which goes to the client)
                readStream.pipe(res);
            });

            readStream.on('error', function(err) {
                res.end(err);
            });
    }
});

You need to set some header flags;

res.writeHead(200, {
    'Content-Type': 'audio/mpeg',
    'Content-Length': stat.size,
    'Content-Disposition': 'attachment; filename=your_file_name'
});

For replacing streaming with download;

var file = fs.readFile(filePath, 'binary');

res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'audio/mpeg');
res.setHeader('Content-Disposition', 'attachment; filename=your_file_name');
res.write(file, 'binary');
res.end();

以下解决方案适用于 Express JS。

app.get('/download', (req, res) => res.download('./file.pdf'))
response.writeHead(200, {
    'Content-Type': 'audio/mpeg',
     modification-date="date_object",
    'Content-Disposition: attachment; 
     filename=output.mp3' 

  });

you need to works on your header part ie your content-Disposition part, only then it will allow you to get the data out. read more about content Disposition

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM