web-dev-qa-db-fra.com

demande-promesse télécharger le fichier pdf

J'ai reçu plusieurs fichiers pdf et je dois le télécharger à partir d'une API REST.

Après l'authentification et la connexion, j'essaie de télécharger le fichier avec request-promise:

const optionsStart = {
  uri: url,
  method: 'GET',
  headers: {
      'X-TOKEN': authToken,
      'Content-type': 'applcation/pdf'
    }
  }
  request(optionsStart)
    .then(function(body, data) {
      let writeStream = fs.createWriteStream(uuid+'_obj.pdf');
      console.log(body)
      writeStream.write(body, 'binary');
      writeStream.on('finish', () => {
        console.log('wrote all data to file');
      });
      writeStream.end();
    })

La demande crée un pdf (environ 1-2 Mo) mais je ne peux pas l'ouvrir. (Mac Preview affiche des pages vierges et Adobe show =>

Une erreur s'est produite lors de l'ouverture de ce document. Un problème est survenu lors de la lecture de ce document (14).

Je n'ai aucune information sur l'API Endpoint où je télécharge les fichiers. Ayez juste cette boucle:

curl -o doc.pdf --header "X-TOKEN: XXXXXX" 
http://XXX.XXX/XXX/docs/doc1

Où est mon erreur?

Mettre à jour:

J'ai ouvert le fichier en édition et le fichier ressemble à ça: file preview

Je n'ai aucune expérience avec ça :-)

10
Ckappo

Ajoutez l'encodage: "binaire" à vos options de demande:

const optionsStart = {
  uri: url,
  method: "GET",
  encoding: "binary", // it also works with encoding: null
  headers: {
    "Content-type": "application/pdf"
  }
};
14
Radu Luncasu

Ajouter encoding: null à vos options de demande:

const optionsStart = {
  uri: url,
  method: "GET",
  encoding: null,
  headers: {
    "Content-type": "application/pdf"
  }
};

Ensuite, transformez la réponse en tampon (si nécessaire):

const buffer = Buffer.from(response);
11
Juan Gaitán

essaye ça

const optionsStart = {
      uri: url,
      method: 'GET',
      headers: {
          'X-TOKEN': authToken,
          'Content-type': 'applcation/pdf'
      },
      encodig: null
  }
  request(optionsStart, (err, resp) => {
      let writeStream = fs.createWriteStream(uuid+'_obj.pdf');
      writeStream.write(resp.body, 'binary');
      writeStream.on('finish', () => {
        console.log('wrote all data to file');
      });
      writeStream.end();
  })
0
Roshan gupta