16

我收到了多个 pdf 文件,必须从 REST-API 下载。

在 auth 和 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

我的错误在哪里?

更新:

我在编辑中打开了文件,文件看起来像这样: 文件预览

没有任何经验:-)

4

3 回答 3

21

将 encoding: 'binary' 添加到您的请求选项中:

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

于 2018-02-12T18:45:44.303 回答
17

添加encoding: null到您的请求选项:

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

然后,将响应转换为 Buffer(如有必要):

const buffer = Buffer.from(response);
于 2018-10-20T14:58:26.157 回答
2

试试这个

const optionsStart = {
      uri: url,
      method: 'GET',
      headers: {
          'X-TOKEN': authToken,
          'Content-type': 'application/pdf'
      },
      encoding: 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();
  })
于 2020-02-20T19:31:24.937 回答