Spring mvc动态文件下载
2016-02-14 22:36
459 查看
文件下载不能使用ajax实现动态内容文件下载,必须为Form才可以弹出下载窗口。 使用ajax只会返回内容到页面。
那么问题来,一般下载都是异步的,我们如果要实现这样效果,应该怎么办?
解决办法:我们可以使用动态创建表单方式模拟异步下载。
1、动态创建表单代码
Java Controller
下载一个excel文件,文件内容为字节码为1,2,3,4,4
注意:如果文件内容需要转换,可以选择正确的Spring转换器。
需要在“org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter”bean的“<property name="messageConverters">”设置。
注意:目前浏览器chorme和firefox都不弹出保存路径窗口,都使用默认下载路径。只有IE是可以设置保存自定义路径。
那么问题来,一般下载都是异步的,我们如果要实现这样效果,应该怎么办?
解决办法:我们可以使用动态创建表单方式模拟异步下载。
1、动态创建表单代码
// Ajax 文件下载 $.ajaxDownload = function (url, data, method) { if (url && data) { // data 是 string 或者 array/object data = typeof data == 'string' ? data : $.param(data); // 把参数组装成form的input var inputs = ''; $.each(data.split('&'), function () { var param = this.split('='); inputs += '<input type="hidden" name="' + param[0] + '" value="' + param[1] + '" />'; }); $('<form action="' + url + '" method="' + (method || 'post') + '">' + inputs + '</form>') .appendTo('body').submit().remove(); } }
2、执行下载请求
$.ajaxDownload("/list/book/downLoad","&ids=1,2,3","post");
Java Controller
下载一个excel文件,文件内容为字节码为1,2,3,4,4
<span style="white-space:pre"> </span>ByteArrayOutputStream output = null; try { output = new ByteArrayOutputStream(); output.write(new byte[]{1,2,3,4,4,}); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", "TestExcel.xlsx"); return new ResponseEntity<byte[]>(output.toByteArray(),headers, HttpStatus.CREATED); } catch (Exception e) { e.printStackTrace(); } finally { try { if (output != null) { output.flush(); output.close(); } if (wb != null) { wb.close(); } } catch (IOException e) { e.printStackTrace(); } }
注意:如果文件内容需要转换,可以选择正确的Spring转换器。
org.springframework.http.converter.ByteArrayHttpMessageConverter org.springframework.http.converter.StringHttpMessageConverter org.springframework.http.converter.StringHttpMessageConverter
需要在“org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter”bean的“<property name="messageConverters">”设置。
注意:目前浏览器chorme和firefox都不弹出保存路径窗口,都使用默认下载路径。只有IE是可以设置保存自定义路径。
相关文章推荐
- java.net.ConnectException: failed to connect to /127.0.1.1 (port 8080)的解决办法
- Java基础-jdk自动资源管理功能
- Java多线程
- 从头认识Spring-2.3 注解装配-@autowired(5)-限定器@Qualifier(2)
- java并行编程
- JAVA与C#的区别
- 从头认识Spring-2.3 注解装配-@autowired(5)-限定器@Qualifier(1)
- 线程基础:JDK1.5+(9)——线程新特性(中)
- 有关eclipse for java ee版本遇到的坑( Context initialization failed)
- eclipse中离线安装genymotion插件
- Spring+Quartz(定时任务)
- JVM如何判断对象是否需要被回收
- 一个简单的springmvc-mybatis项目,新闻网站
- eclipse卸载自带maven
- eclipse卸载自带maven
- 【JAVA】9、表达式类型的转换
- java定时删除文件夹及文件
- 从头认识Spring-2.3 注解装配-@autowired(4)-required(2)
- spring的ioc简述
- 【JAVA】8、简洁表达式