Node.js 如何从Node JS客户端的响应中读取和保存pdf文件
我已经创建了一个节点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
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');