请求承诺下载pdf文件

Cka*_*ppo 4 request node.js request-promise

我收到了多个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();
    })
Run Code Online (Sandbox Code Playgroud)

请求创建一个pdf(大约1-2MB),但我无法打开它.(Mac预览显示空白页面和adobe show =>

打开此文档时出错.阅读本文件存在问题(14).

我没有关于下载文件的API端点的信息.只是有这个卷曲:

curl -o doc.pdf --header "X-TOKEN: XXXXXX" 
http://XXX.XXX/XXX/docs/doc1
Run Code Online (Sandbox Code Playgroud)

我的错误在哪里?

更新:

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

没有任何经验:-)

Rad*_*asu 12

添加编码:'binary'到您的请求选项:

const optionsStart = {
  uri: url,
  method: "GET",
  encoding: "binary", // it also works with encoding: null
  headers: {
    "Content-type": "application/pdf"
  }
};
Run Code Online (Sandbox Code Playgroud)

  • 如果`encoding:"binary"`不起作用,请尝试`encoding:null`! (9认同)

Jua*_*tán 8

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

const optionsStart = {
  uri: url,
  method: "GET",
  encoding: null,
  headers: {
    "Content-type": "application/pdf"
  }
};
Run Code Online (Sandbox Code Playgroud)

然后,将响应转换为缓冲区(如果需要):

const buffer = Buffer.from(response);
Run Code Online (Sandbox Code Playgroud)

  • 如果你设置了 `encoding: null` 那么你不需要做 `Buffer.from(response)` 因为响应已经是一个缓冲区 (2认同)