在React中创建临时文件并使用axios获取文件并弹出显示下载

时间:2018-04-03 07:16:01

标签: reactjs express axios fs

在我的应用程序中,我遇到的情况是必须使用自定义扩展创建二进制文件,然后将其发送到客户端。客户端请求axios然后在服务器上创建一个文件(例如在tmp中):

在Express中我有这样的方法:

router.post('/send-some-file',(req,res)=>{
const {id} = req.body
/*
* Some code for getting information from db is here
*/
const fileName = "myfile.myextension"
const filePath = path.join(__dirname+`../${fileName}`)
fs.writeFile(filePath,"Data From Database",err=>{
    if(!err){
        //send file to client 'axios' , I use res.download
        res.download(filePath,err=>{})
    }   
 } 
})

这段代码是我的服务器代码,它创建文件并发送它代码的问题是我无法知道文件何时完全下载以删除文件。

使用redux在React中的

我发送一个操作,并使用axios调用此方法

axios.post('some-url/send-some-file','my id',config()).then(res => {}).catch(er=>{})

知道我想浏览器下载文件或者让用户以我所描述的扩展格式下载文件。

并且响应是这样的,标题是: 但我不知道如何弹出下载窗口或如何浏览器自动下载文件

Header Image

1 个答案:

答案 0 :(得分:1)

你可以试试吗

 axios.post('some-url/send-some-file','my id',config()).then(res => 
{
    const url = window.URL.createObjectURL(new Blob([res.data]));
    const link = document.createElement('a');
    link.href = url;
    link.setAttribute('download', 'file.pdf');
    document.body.appendChild(link);
    link.click();
}).catch(er=>{})