395 votes

Téléchargez un fichier depuis le serveur NodeJS utilisant Express

Probablement une question stupide, mais comment puis-je télécharger un fichier qui se trouve dans mon serveur à ma machine accédant à une page dans un serveur nodeJS ?

J’utilise le ExpressJS et j’ai essayé ceci :

Mais je ne peux pas obtenir le nom du fichier et le type de fichier (ou extension). Est quelqu'un peut m’aider avec cela ?

Merci beaucoup

718voto

loganfsmyth Points 25483

Aussi loin que votre navigateur est concerné, le nom du fichier est simplement "télécharger", vous devez donc vous donner plus d'informations en utilisant un autre en-tête HTTP.

res.setHeader('Content-disposition', 'attachment; filename=dramaticpenguin.MOV');

Vous pouvez également envoyer un mime-type comme ceci:

res.setHeader('Content-type', 'video/quicktime');

Si vous voulez quelque chose de plus approfondi, ici ya aller.

var path = require('path');
var mime = require('mime');

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);
});

Vous pouvez définir la valeur d'en-tête que vous voulez. Dans ce cas, je suis à l'aide d'un mime-type de la bibliothèque, https://github.com/bentomas/node-mime, afin de vérifier le type mime du fichier.

Une autre chose importante à noter ici est que j'ai changé votre code pour utiliser un readStream. C'est une bien meilleure façon de faire les choses parce que l'utilisation de toute méthode avec "Sync" dans le nom est mal vu car nœud est destiné à être asynchrone.

Mise à jour

Express a un helper pour cela, pour rendre la vie plus facile.

app.get('/download', function(req, res){
  var file = __dirname + '/upload-folder/dramaticpenguin.MOV';
  res.download(file); // Set disposition and send it.
});

20voto

jordanb Points 1

Pour les fichiers statiques comme fichiers PDF, documents Word, etc. il suffit d’utiliser la fonction statique du Express dans votre fichier config :

Et puis vient de mettre tous vos fichiers à l’intérieur de ce dossier « public », par exemple :

Et puis un lien ancien régulier permet à l’utilisateur pour le télécharger :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X