Memperbarui
Express memiliki penolong untuk hal ini untuk membuat hidup lebih mudah.
app.get('/download', function(req, res){
const file = `${__dirname}/upload-folder/dramaticpenguin.MOV`;
res.download(file); // Set disposition and send it.
});
Jawaban Lama
Sejauh menyangkut browser Anda, nama file hanya 'unduh', jadi Anda perlu memberikan lebih banyak info dengan menggunakan header HTTP lain.
res.setHeader('Content-disposition', 'attachment; filename=dramaticpenguin.MOV');
Anda mungkin juga ingin mengirim tipe pantomim seperti ini:
res.setHeader('Content-type', 'video/quicktime');
Jika Anda menginginkan sesuatu yang lebih mendalam, ini dia.
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);
});
Anda dapat mengatur nilai header ke apa pun yang Anda suka. Dalam hal ini, saya menggunakan perpustakaan tipe-mime - node-mime , untuk memeriksa apa tipe-mime dari file tersebut.
Hal penting lain yang perlu diperhatikan di sini adalah bahwa saya telah mengubah kode Anda untuk menggunakan readStream. Ini adalah cara yang jauh lebih baik untuk melakukan sesuatu karena menggunakan metode apa pun dengan 'Sinkronisasi' dalam nama tidak disukai karena node dimaksudkan untuk tidak sinkron.