- 最近看到很多前端的小伙伴们,需要从服务器端下载诸如excel,word,pdf的文件,但是在处理时怎么也没法产生想要的效果(点击后立即下载文件),而是没有任何响应,查看控制台发现返回的数据是一片乱码,结合自己的经验,希望能给大家一些帮助。
- 我这里ajax请求使用VUE的常用小伙伴axios,怎么用axios我就不详细介绍了,不会的小伙伴请看这里
this.$http.post('/outputExcel',{ //Content_Type:'Authorization',// excelData:JSON.stringify(this.tableData),可以付带一些参数 }).then((res)=> { console.log(res.data.filePath) //正常情况下返回值是excel文件的下载路径 this.excelpath="http://127.0.0.1:3000/download/"+res.data.filePath; window.open(this.excelpath) })
-
以上代码配合服务器端实现文件下载,但需要注意的是,服务器端不是返回文件,而是返回文件的路径res.data.filePath。比如我这里的文件存放在服务器端download文件夹下。
取得路径后使用window.open()
方法获取文件,同时服务器端应该有相应的处理程序,处理这个get请求:
我服务器端使用的express: 代码大致如下:var express = require('express'); var path= require('path') var router = express.Router(); router.get('/:filename',function(req,res,next) { var filename=req.params.filename; var file=path.join(__dirname,'../download/'+filename) res.download(file) }) module.exports = router;
- 重点就是,不要直接返回文件,而是通过访问文件路径的方式进行下载;** 如果你还有什么疑问,或者更好的办法,可以留言互相学习交流。
-