nodeJS サーバーのページにアクセスして、サーバーにあるファイルを自分のマシンにダウンロードするにはどうすればよいですか?
私は ExpressJS を使用しており、これを試しています:
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();
});
しかし、ファイル名とファイルの種類 (または拡張子) を取得できません。誰か助けてくれませんか?
ベストアンサー1
アップデート
急行ヘルパーがいるこれにより生活が楽になります。
app.get('/download', function(req, res){
const file = `${__dirname}/upload-folder/dramaticpenguin.MOV`;
res.download(file); // Set disposition and send it.
});
古い回答
ブラウザから見た場合、ファイル名は単なる「download」なので、別の HTTP ヘッダーを使用して詳細情報を提供する必要があります。
res.setHeader('Content-disposition', 'attachment; filename=dramaticpenguin.MOV');
次のような MIME タイプを送信することもできます。
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.getType(file);
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
res.setHeader('Content-type', mimetype);
var filestream = fs.createReadStream(file);
filestream.pipe(res);
});
ヘッダーの値は好きなように設定できます。この場合、MIMEタイプライブラリを使用しています -ノードマイム、ファイルの MIME タイプを確認します。
ここで注目すべきもう 1 つの重要な点は、readStream を使用するようにコードを変更したことです。ノードは非同期であるため、名前に「Sync」が含まれるメソッドの使用は好ましくないため、これははるかに優れた方法です。