Bagaimana saya bisa mengunduh file yang ada di server saya ke mesin saya mengakses halaman di server nodeJS?
Saya menggunakan ExpressJS dan saya sudah mencoba ini:
app.get('/download', function(req, res){
var file = fs.readFileSync(__dirname + '/upload-folder/dramaticpenguin.MOV', 'binary');
res.setHeader('Content-Length', file.length);
res.write(file, 'binary');
res.end();
});
Tapi saya tidak bisa mendapatkan nama file dan tipe file (atau ekstensi). Dapatkan seseorang menolong saya dengan itu?
Jawaban:
Memperbarui
Express memiliki penolong untuk hal ini untuk membuat hidup lebih mudah.
Jawaban Lama
Sejauh menyangkut browser Anda, nama file hanya 'unduh', jadi Anda perlu memberikan lebih banyak info dengan menggunakan header HTTP lain.
Anda mungkin juga ingin mengirim tipe pantomim seperti ini:
Jika Anda menginginkan sesuatu yang lebih mendalam, ini dia.
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.
sumber
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
tnx!.set()
sebagai ganti.setHeader()
btwMenggunakan
res.download()
Ini mentransfer file di jalur sebagai "lampiran". Misalnya:
res.download()
sumber
nodejs proxy file download response
praktik terbaikUntuk file statis seperti pdf, dokumen Word, dll. Cukup gunakan fungsi statis Express di konfigurasi Anda:
Dan kemudian letakkan semua file Anda di dalam folder 'publik' itu, misalnya:
Dan kemudian tautan lama biasa akan memungkinkan pengguna untuk mengunduhnya:
sumber
this.use('/topsecret', mGetLoggedInUser, mEnsureAccess, express.static('topsecret'))
... dan kemudian setiap permintaan melewati mEnsureAccess. Tentu saja, itu berarti Anda harus dapat mengetahui tingkat akses pengguna hanya berdasarkan url dokumen aman, atau apa pun.Di Express 4.x, ada
attachment()
metode untukResponse
:sumber
sumber
Begini cara saya melakukannya:
Kode:
sumber
window.open("/api/get_audio_file");
, lihat: stackoverflow.com/a/20177012