作者:文人博客 | 来源:互联网 | 2024-11-03 12:06
在React应用中实现通过POST请求下载PDF文件的功能,本文提供了完整的代码示例。具体实现包括设置状态以显示加载提示,并通过控制台日志记录下载索引,确保请求的正确性和用户体验。此外,还详细介绍了如何处理响应流并将其转换为可下载的PDF文件,适用于需要安全传输数据的场景。
react处理post请求的下载pdf功能
完整代码:
//下载
Down=(index)=>{
this.setState({
visible: true,
});
console.log(index.pdfPath);
const THIS=this;
axios.post(‘http://localhost:3006/archiveDocument/downLoadPdf’,
{
“path”: index.pdfPath
},
{responseType:‘blob’}
).then((data)=> {
let Data = eval(data);
if (Data.data.state === 0) {
console.log(Data.data.message);
}
else {
console.log(“成功”);
console.log(Data.data);
//创建链接
let URL = window.URL || window.webkitURL;
let objectUrl = URL.createObjectURL(Data.data);
let a = document.createElement(‘a’);
a.href = objectUrl;
a.download = index.pdfPath;
document.body.appendChild(a);
a.click();
a.remove();
}
})
.catch(function (error){
console.log(error);
});
首先第一个难点是在, {responseType:‘blob’},这个是将返回的二进制文件转换成blob对象,如果成功返回,则在下载请求的返回中能得到pdf开头的回应
在post请求在相应中能得到以上的以pdf开头的乱码后,这个下载功能就完成了一半了,剩下的问题就是将这个
就是如何将blob对象转换成下载链接,并且调用浏览器的下载部分,关键代码就是代码中的
//创建链接
let URL = window.URL || window.webkitURL;
let objectUrl = URL.createObjectURL(Data.data);
let a = document.createElement(‘a’);
a.href = objectUrl;
a.download = index.pdfPath;
document.body.appendChild(a);
a.click();
a.remove();
`