Node.js 如何从Node JS客户端的响应中读取和保存pdf文件

Node.js 如何从Node JS客户端的响应中读取和保存pdf文件,node.js,Node.js,我已经创建了一个节点JS服务器,它将PDF推送到客户端,如下所示 app.post("/home", function(req, res, next) { // to download the file automatically /* var file = fs.createReadStream('E:\\test\\conversion\\310-output.pdf'); var stat = fs.statSync('E:\\test\\conversi

我已经创建了一个节点JS服务器,它将PDF推送到客户端,如下所示

app.post("/home", function(req, res, next) {

    // to download the file automatically
    /*
    var file = fs.createReadStream('E:\\test\\conversion\\310-output.pdf');
    var stat = fs.statSync('E:\\test\\conversion\\310-output.pdf');
    res.setHeader('Content-Length', stat.size);
    res.setHeader('Content-Type', 'application/pdf');
    res.setHeader('Content-Disposition', 'attachment; filename=output.pdf');
    file.pipe(res);
    */
    // To Stream file to browser

    var data =fs.readFileSync('E:\\test\\conversion\\310-output.pdf');
    res.contentType("application/pdf");
    res.send(data);

    });
在客户端脚本中,我试图调用上面的post命令,希望从响应中获取pdf并将其保存在本地。不知道怎么做。下面是客户端脚本。在浏览器中,我可以看到PDF,但我需要通过客户端脚本访问它

var request = require('request');

request.post(
    'http://localhost:3000/home',
    {},
    function (error, response, body) {
        if (!error && response.statusCode == 200) {
            console.log(" Response :: "+response);
           // console.log(" Body :: "+body);
        }
    }
);

要通过
request
lib下载一个文件,我们将提供多种方法(我想是的!)

下面是一个简单的方法:从请求-响应创建一个管道流,然后使用写流将数据从该流保存到一个文件中

const request = require('request');
const fs = require('fs');

const req = request.post(
  'http://localhost:3000/home',
  {},
);


req.on('response', function (res) {
  res.pipe(fs.createWriteStream('./filename_to_save.pdf'));
});

要以正确的格式接收pdf响应,请在调用api时使用“responseType”:“arraybuffer”,和
“responseEncoding”:“binary”

  const config = {
      baseURL: "<your base url>",
      url: "<api endpoint>",
      headers: {},
      method: "<method>",
      responseType: "arraybuffe",
      responseEncoding: "binary"
      
    }
    
    let response = await axios(config)
    
    //response.data will be binary encoded buffer Array of pdf data

    //*To convert to base64*
    var base64 =result.data.toString("base64")
    
    
    //to convert to binary
    var binary =result.data.toString("binary")
    
    //to write to file
    fs.writeFileSync(`${name}.pdf`, response.data,'binary');
const-config={
baseURL:“”,
url:“”,
标题:{},
方法:“,
响应类型:“arraybuffe”,
响应编码:“二进制”
}
让响应=等待axios(配置)
//response.data将是pdf数据的二进制编码缓冲区数组
//*转换为base64*
var base64=result.data.toString(“base64”)
//转换成二进制
var binary=result.data.toString(“二进制”)
//写入文件
writeFileSync(`${name}.pdf`,response.data,'binary');