Spring MVC的文件下载

来源:互联网 发布:贵金属行情软件 编辑:程序博客网 时间:2024/05/29 16:33

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1、使用虚拟路径方式</span>

1)首先需要配置虚拟路径,将一个url对应到服务器的一个文件夹

2)url + 文件名即可在浏览器上访问服务器中的文件,当浏览器不支持的文件时,浏览器自动下载

此方法有两个弊端: 1)当浏览器支持直接打开文件(如图片)时,文件不会被下载。        ps:可能有办法设置,我不知道

     2)下载的文件名与服务器中的文件名是一样的,而存放在服务器中的文件名通常是包含时间信息的长字符串,这样下载下来的文件名就是不是很好

1.2、tomcat 虚拟路径配置

<-- <span style="font-family: Arial, Helvetica, sans-serif;">打开Tomcat7/conf/web.xml,找到</span> --><servlet>    <servlet-name>default</servlet-name>    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>    <init-param>        <param-name>debug</param-name>        <param-value>0</param-value>    </init-param>    <init-param>        <param-name>listings</param-name>        <param-value>true</param-value>    </init-param>    <load-on-startup>1</load-on-startup></servlet><-- <param-value>处将false改为true --><-- 再打开server.xml -->在</host>之前加入<Context path="/名字" docBase="D:\Tomcat 7.0\文件夹名"/>


2、使用ResponseEntity 方式下载

@RequestMapping("download")public ResponseEntity<byte[]> download() throws IOException {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);headers.setContentDispositionFormData("attachment", "文件名+文件类型");return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(File对象), headers, HttpStatus.CREATED);}
上诉ResponseEntity<byte[]> 构造方法中第一个参数为byte数组类型


当得到的是InputStream时,需要一个方法将InputStream流转换成byte数组

public static byte[] getByteArray(InputStream inputStream) throws IOException {    ByteArrayOutputStream swapStream = new ByteArrayOutputStream();    byte[] buff = new byte[2048];int bytesRead = 0;while ((bytesRead = inputStream.read(buff, 0, 100)) > 0) {swapStream.write(buff, 0, bytesRead);}return swapStream.toByteArray();}

上传使用input的file标签,在后台使用CommonsMultipartFile对象可以直接获取到file,继而进行其他操作


0 0