2018-12-06 · Develop

关于 Java 附件下载无响应

今天和同事一起分析了个有区的问题:

关于使用 Ajax Post 请求访问 Java 后台的文件下载,没有响应。

在 Web 项目中经常需要下载文件的需求。今天就遇到这样的问题,后端使用的主要代码:

response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition","attachment;filename=" + fileName);
response.setContentLength(file.length());

进行前端 Debug 发现 javascript 解析了文件信息:

$.ajax({
    url: url,
    type: 'post',
    data: data,
    success: function(data, status, xhr) {
        console.log(data);
    }
})

发现给输出了。。。输出了。。。

经过在网上找答案:

Post 方式进行文件下载

POST请求下载文件

ajax方式下载文件

我们找到了答案,立此文记录下:

ajax 方式请求的数据只能存放在 javascipt 内存空间,可以通过 javascript 访问,但是无法保存到硬盘,因为javascript 不能直接和硬盘交互,否则将是一个安全问题。Ajax 设计的初衷就是用来实现异步刷新的,用以改善原始的 form 表单提交刷新页面的问题。

解决方案也是网上同胞的使用 form 来进行提交

$form = $("<form></form>").attr("action", url).attr("method", "post");
$form.append($("<input></input>").attr("type", "hidden").attr("name", "fileName").attr("value", fileName));
$form.appendTo('body').submit().remove();

或者是将后台改为 get 请求。