求助:vue axios get请求下载文件失败

问题: 我不想使用简单暴力的方法,就直接window.open或者location.href下载文件的链接,这样虽然可行,但是,我想获得更多的信息以及交互。

所以,我想使用封装的axios来请求这个下载文件。我查阅了很多方法,基本上就是这样的:
image.png

这样虽然是成功的,但是,出现了一个问题。如果用户登录超时,这个超时的错误提示信息就会替换到下载文件的内容中,并且下载了下来。

思路:我想到了一个方法,我把这个可以正常get请求下载的方法,封装起来,再调用那边封装好的axios方法,毕竟那边有封装拦截器,可以用拦截器来判断用户是否登录超时,然后就对应的不执行下载文件的续操作。

然后就成了这样了:
image.png

request里面是封装了axios的请求的,以及拦截器。这个请求是成功的了,但是还是报错了,response返回的是一堆乱码,那个content-type也不是我设置的x-download,而是text/plain。。。。

请问,这里如果要用到封装的形式,可以怎么搞定它?

阅读 7.4k
3 个回答

不大改的情况下,先验证用户是否登陆超时,然后再发送文件下载的请求操作?

建议使用 <a>download 属性来处理下载。参考 MDN <a>

首先get请求并没有请求体, content-type其实多余。
无论是客户端还是服务端,content-type其实告诉对方,我这次的请求/响应实体是什么形式,并不是约束对方的返回值。
关于axios下载文件,我写过一个文章,和你的写法稍有不同,你可以参考下:http://wintc.top/article/31

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题