web-dev-qa-db-fra.com

Créez un fichier texte dans node.js à partir d'une chaîne et diffusez-le en réponse

  1. J'utilise express.js

  2. J'ai une chaîne "Hello world!"

  3. Je veux qu'un utilisateur clique sur

    <a href=/download>Download</a>
    
  4. L'utilisateur doit obtenir le téléchargement Hello.txt avec le texte qu'il contient, PAS ouvrir un onglet avec le texte.

  5. J'ai cherché des moyens d'y parvenir, je suppose que cela a quelque chose à voir avec la création de flux de lecture à partir du tampon et de la tuyauterie vers la réponse, mais la plupart des exemples concernaient la lecture de fichiers réels à partir du disque, je ne veux pas lire à partir de disque, je veux juste répondre avec un fichier créé à partir d'une chaîne.

Merci!

23
user1323136

Je pense que je comprends ce que vous essayez de faire. Vous souhaitez envoyer un fichier .txt au client sans créer réellement un fichier sur le disque.

C'est en fait assez basique et extrêmement facile. Tout ce que vous avez à faire est de définir votre type MIME dans l'en-tête, mais la plupart des navigateurs ne téléchargent pas les fichiers .txt par défaut. Ils ouvrent et affichent simplement le contenu.

var text={"hello.txt":"Hello World!","bye.txt":"Goodbye Cruel World!"};
app.get('/files/:name',function(req,res){
   res.set({"Content-Disposition":"attachment; filename=\"req.params.name\""});
   res.send(text[req.params.name]);
});

À l'avenir, vous pouvez envoyer toutes les données stockées sous forme de variable. Si vous avez un tampon chargé avec une image, par exemple, vous pouvez l'envoyer de la même manière en changeant simplement le Content-Type, sinon le navigateur n'a aucune idée des données que vous envoyez, et exprime, je crois, définit le type par défaut sur text/html. Voici une bonne référence à types de supports Internet et types MIME .

32
tsturzl

Essaye ça:

router.get('/download', (req, res) => {
  var text = 'Hello world!'
  res.attachment('filename.txt')
  res.type('txt')
  res.send(text)
})
3
Dark Litss

cela fonctionne pour moi !

var text="hello world";

res.setHeader('Content-type', "application/octet-stream");

res.setHeader('Content-disposition', 'attachment; filename=file.txt');

res.send(text);
3
vijay kumar

Merci pour l'aide les gars, voici ce que j'ai fini avec: @aaron, y a-t-il un moyen pour que la disposition fonctionne dans tous les navigateurs?

res.setHeader('Content-disposition', 'attachment; filename=theDocument.txt');
res.setHeader('Content-type', 'text/plain');
res.charset = 'UTF-8';
res.write("Hello, world");
res.end();
2
user1323136