2016-02-17 1 views
0

https://api.na1.echosign.com/api/rest/v5/agreements/ {agreementId}/combinedDocumentEchoSign combinedDocument api

Je suis en train de créer un fichier à partir du corps de la réponse, mais il crée un fichier que je ne peux pas ouvrir. Il nécessite un mot de passe même s'il n'y en a pas sur le fichier. Je pense que cela doit avoir quelque chose à voir avec l'encodage/décodage. J'utilise un serveur de noeud express. Voici les quelques lignes de code que je utilise:

var request = require('request'); 

request({ 
    baseUrl: 'https://api.na1.echosign.com/api/rest/v5', 
    url: '/agreements/' + req.params.id + '/combinedDocument', 
    headers: {'Access-Token': process.env.ECHOSIGN_INTEGRATIONKEY} 
    }, 
    function(error, response, body){ 
    if(error) { 
     res.send(error); 
    } 
    else { 
     var buf = new Buffer(body) 
     res.set({ 
     'Content-Disposition': 'attachment; filename=test.pdf', 
     'Content-Type': 'application/pdf; charset=utf-8' 
     }); 
     res.write(buf); 
     res.end(); 
    } 
    } 
); 

Répondre

0

C'est ce qui a fini par travailler à la fin dans le cas où quelqu'un d'autre tombe par hasard sur ce sujet. Je pense que le problème était que les données renvoyées par l'API étaient un flux et qu'il fallait avoir la logique de segmentation, puis être concaténées afin d'éviter d'être corrompu.

Egalement inclus est l'encodage en base64, en le poussant dans une base de données, puis en le récupérant, en le décodant et en le poussant vers le navigateur. Je n'allais pas le laisser comme ça, mais l'avait mis en place de cette façon pour tester le cycle complet.

router.get('/echosign/agreement/:id', function(req, res) { 
    if (req.user !== 'myUserId') { 
    console.log(req.user); 
    res.redirect('/'); 
    } else { 

    var request = require('request'); 
    var data = []; 

    request({ 
     baseUrl: 'https://api.na1.echosign.com/api/rest/v5', 
     url: '/agreements/' + req.params.id + '/combinedDocument', 
     headers: {'Access-Token': process.env.ECHOSIGN_INTEGRATIONKEY} 
    }).on('data', function(chunk){ 
     data.push(chunk); 
     }) 
     .on('end', function(){ 
     data = Buffer.concat(data).toString('base64'); 

     client.connect(function(err) { 
      if(err) { 
      return console.error('could not connect to postgres', err); 
      } 
      client.query("UPDATE agreements SET file = '" + data + "' WHERE agreementid = '" + req.params.id + "' RETURNING agreement, file", function(err, result) { 
      if(err) { 
       return console.log(result, err); 
      } 
      client.end(); 
      res.set({ 
       'Content-Type': 'application/pdf;charset=UTF-8', 
       'Content-Disposition': "inline; filename='" + result.rows[0].agreement.name + ".pdf'" 
      }); 
      res.send(new Buffer(result.rows[0].file, 'base64')); 
      }); 
     }); 
     }); 
    } 
});