关于前端使用ajax下载服务器端文件乱码的问题

  • 最近看到很多前端的小伙伴们,需要从服务器端下载诸如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;
    
  • 重点就是,不要直接返回文件,而是通过访问文件路径的方式进行下载;** 如果你还有什么疑问,或者更好的办法,可以留言互相学习交流。

    原文作者:懒懒的技术宅
    原文地址: https://segmentfault.com/a/1190000013215545
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞