Comment puis-je télécharger un fichier qui se trouve sur mon serveur sur ma machine accédant à une page sur un serveur nodeJS?
J'utilise ExpressJS et j'ai essayé ceci:
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();
});
Mais je ne peux pas obtenir le nom de fichier et le type de fichier (ou l'extension). Est-ce que quelqu'un peut m'aider avec cela?
Réponses:
Mettre à jour
Express a une aide pour cela pour vous faciliter la vie.
Ancienne réponse
En ce qui concerne votre navigateur, le nom du fichier est simplement «télécharger», vous devez donc lui donner plus d'informations en utilisant un autre en-tête HTTP.
Vous pouvez également envoyer un type MIME comme celui-ci:
Si vous voulez quelque chose de plus approfondi, c'est parti.
Vous pouvez définir la valeur d'en-tête comme vous le souhaitez. Dans ce cas, j'utilise une bibliothèque de type mime - node-mime , pour vérifier quel est 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, car l'utilisation de toute méthode avec «Sync» dans le nom est désapprouvée car le nœud est censé être asynchrone.
la source
res.setHeader('Content-disposition', 'attachment; filename=' + filename);
tnx!.set()
au lieu de.setHeader()
btwUtilisation
res.download()
Il transfère le fichier sur path en tant que «pièce jointe». Par exemple:
res.download()
la source
nodejs proxy file download response
meilleures pratiquesPour les fichiers statiques comme pdfs, documents Word, etc., utilisez simplement la fonction statique d'Express dans votre configuration:
Et puis il suffit de mettre tous vos fichiers dans ce dossier «public», par exemple:
Et puis un ancien lien régulier permettra à l'utilisateur de le télécharger:
la source
this.use('/topsecret', mGetLoggedInUser, mEnsureAccess, express.static('topsecret'))
... et chaque demande passe par mEnsureAccess. Bien sûr, cela signifie que vous devrez être en mesure de déterminer le niveau d'accès d'un utilisateur uniquement en fonction de l'URL du document sécurisé, ou autre chose.Dans Express 4.x, il existe une
attachment()
méthode pourResponse
:la source
la source
Voici comment je le fais:
Code:
la source
window.open("/api/get_audio_file");
, voir: stackoverflow.com/a/20177012