最近在做一个浏览器下载文件功能,遇到一个奇怪的问题,“浏览器已经收到服务器的响应,也可以看到一直收到数据,但不弹出下载提示框。"一开始我猜测是服务器的响应头有问题:servercode//filedownloadapp.get('/fm/download',(req,res)=>{const{target}=req.query;if(target){constfile_path=connector.decode(target);constrs=fs.createReadStream(file_path);res.setHeader('Content-Disposition',`attachment;filename=${file_path.split('/').pop()}`);rs.pipe(res);}else{res.send({success:false,msg:'下载路径无效'});}});服务端使用express框架将文件流式返回给前端。后来受到stackoverflow的启发。不是服务器端的问题,而是前端使用了ajax请求。如果使用axios之类的库请求下载接口,虽然可以接收到数据,但是无法调用浏览器的下载弹窗。解决方法是使用window.open(download_url)打开新的浏览器选项卡进行下载,或使用window.location指向下载链接。asyncDownloadFile(){window.open(downLoadUrl)}这样浏览器就可以正常弹出下载框了。最后,希望这篇文章能对你有所帮助。如果觉得有用,请点赞收藏,谢谢!????文章首发于IICOOM技术博客《Content-Disposition:attachment没有触发浏览器下载弹框》
