Java的文件下载无法通过Ajax方式,原因在于通过该方式的请求,浏览器会将response中的文件数据当成字符串进行解析,所以以该方式请求的时候,浏览器不会有任何响应,我们打开浏览器的开发者工具中会看到一堆乱码,通过学习,发现有以下的方式可以解决该问题:
1:以表单形式提交(通过jquery手动提交表单,缺点是:文件下载过程中,页面只会在左下角有一个等待响应的提示,但是不够明显)
2:通过Jquery手动设置给隐藏的A标签,A标签的taget属性设置成:"_blank"设置文件下载请求路径,然后:$("#A标签")[0].click进行请求(直接使用$("#a标签").click()不起作用),该方式的好处是文件下载时会自动打开一个tab页,文件下载完成后会自动关闭并且文件下载时页面也可以进行其他的操作。
3:通过异步的方式下载:该方式可以使用ajax进行请求,然后返回提示,具体的任务由后台的其他线程执行,可以将所有的下载文件放到某个列表中进行统一显示(这个方式推荐下载文件的数据较多的时候使用)
4:前台如果想获取到下载的进度:可以通过ThreadLocal进行存储或者将进度存储到数据库前台结合定时器进行定时请求查询显示。