web-dev-qa-db-ja.com

request-promise PDFファイルのダウンロード

複数のPDFファイルを受け取り、REST-APIからダウンロードする必要があります。

Auth and connectの後、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();
    })

リクエストによりpdf(約1〜2MB)が作成されますが、開くことができません。 (Macプレビューでは空白のページが表示され、Adobeショーでは=>

このドキュメントを開くときにエラーが発生しました。このドキュメントを読む際に問題が発生しました(14)。

ファイルをダウンロードするAPIエンドポイントに関する情報がありません。ちょうどこのカールがあります:

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

私の間違いはどこですか?

更新:

編集中にファイルを開いたところ、ファイルは次のようになります。 file preview

その経験はありません:-)

10
Ckappo

エンコーディングを追加: 'binary'をリクエストオプションに追加します。

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

追加 encoding: nullからリクエストオプション:

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

次に、応答をバッファに変換します(必要な場合)。

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

これを試して

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