3 votes

Comment gérer les fichiers POSTed dans Express.js sans effectuer d'écriture sur le disque ?

Je veux permettre aux utilisateurs d'utiliser un formulaire pour télécharger (POST) un fichier image vers mon application Web Express.js. À sa réception, mon application Web l'enverra à l'API GetChute (un service Web d'images).

Je ne veux pas que mon serveur écrive temporairement l'image sur le disque - au lieu de cela, il devrait stocker l'image dans une variable, et l'envoyer à GetChute.

Par défaut, 2 éléments middleware d'Express (Connect et Formidable) fournissent, je pense, une bonne façon d'effectuer automatiquement des écritures sur disque à partir des POST, mais comment pourrais-je les contourner pour accéder directement au bytestream afin d'éviter une écriture sur disque ?

Je pense que quelqu'un de plus intelligent que moi peut trouver une solution plus ordonnée que celle qui a été trouvée récemment pour une question similaire :

Stream de fichier téléchargé avec Express.js à travers gm pour éliminer la double écriture

Merci !

0voto

Laurent Perrin Points 5396

Pouvez-vous transmettre directement la demande à GetChute ?

app.post('/upload', function(req, res) {
  var chuteReq = http.request({
    host: 'api.getchute.com',
    path: '/x/y/z',
    method: 'POST'
  }, function(chuteRes) {
    var chuteBody = '';

    chuteRes.on('data', function(chunk) {
      chuteBody += chunk;
    });

    chuteRes.on('end', function() {
      var chuteJSON = JSON.parse(chuteBody);

      // check the result and build an appropriate response.
      res.end(chuteJSON);
    });
  });

  // pipe the image data directly to GetChute
  req.pipe(chuteReq);      
});

Bien sûr, vous pouvez ajuster la demande à GetChute. Attention, il se peut que vous deviez décoder l'élément multipart/form-data .

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