SpringMVC中两种处理文件上传下载的方式.md
2017-04-26 00:00
543 查看
文件上传
总结一下Java中的文件上传处理方式,总的来说目前用过的是Commons FileUpload这个jar包。在Spring中上传文件会被存放在一个 MultipartFile 对象中。
保存文件也很简单,只需要调用MultipartFile的 transferTo(fileObject);
1. 使用Commons FileUpload 上传文件
使用这个jar包需要加载一个依赖包:Apache Commons-io这里可以使用Maven 进行管理方便处理这些依赖问题
在Spring-mvc的servlet配置文件中加入一下配置
<bean id="multipartResollver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="20000000"/> </bean>
更详细的配置可以参考文档
2. 使用Servlet 3以及更高的版本进行文件上传
需要在Web.xml中对dispactherServlet进行配置,如下:<servlet> <servlet-name> springmvc</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name> </param-name> <param-value> </param-value> </init-param> <load-on-startup> 1 </load-on-startup> <multipart-config> <max-file-size>789087</max-file-size> //最大文件允许上传的数量 -1表示没限制 <max-request-size> 999765</max-request-size> //最大http multipart请求的最大容量,-1表示没限制 <file-size-threshold> 300067</file-size-threshold> //大于这个值时会被写入硬盘 </multipart-config> </servlet>
然后在Spring MVC配置文件中写入一个新的解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.surpport.StandardServletMultipartResolver"> </bean>
两者配置好后,在 Controller中的handler具体实现例如下:
MultipartFile mf = uploadFile.getMultipartFile( ); try{ File file = new File(servletRequest.getServletContext().getRealPath("/file"), fileName); multipartFile.transferTo(file); } catch (IOException e) { e.printStackTrace(); }
文件下载
为了让浏览器识别是下载一个文件,首先要设置响应的内容类型 Content-Type 为Application/Octet-stream.
下面简单的代码将文件发送给浏览器,如下:
//获取 文件夹的真实路径 String datapath = request.getServletContext(),getRealPath("/WEB-INF/Data"); File file = new File(datapath, "xxx.pdf" ); //判断文件是否存在 if ( file.exists ( )) { FileInputStream fis = new FileInputStream ( file ); BufferedInputStream bis = new BufferedInputStream ( fis ); byte[] bytes = new byte[ bis.avaliable( )]; response.setContentType ( contentType ); response.addHeader("Content-Disposition", "attachment;filename=xxx.pdf"); OutputStream os = response.getOutputStream( ); bis.read( bytes ); os.write( bytes ); }
下载文件的一个小建议:
一个简单的可以过滤直接在浏览器或者下载器中下载资源的办法
在判断request的时候判断 referer 是否为空或者是指定的URI。在返回下载文件。
相关文章推荐
- springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)
- springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)
- springMVC两种方式实现多文件上传及效率比较
- springMVC两种方式实现多文件上传及效率比较
- springMVC两种方式实现多文件上传及效率比较
- SpringMVC 中文件上传 MultipartResolver两种使用方式及简单源码分析
- 详解springMVC两种方式实现多文件上传及效率比较
- apache commons fileupload 处理文件上传的两种方式(流式和非流式)
- springMVC两种方式实现多文件上传及效率比较
- springMVC两种方式实现文件的下载
- springMVC两种方式实现多文件上传及效率比较
- springMVC两种方式实现多文件上传及效率比较
- springMVC两种方式实现多文件上传及效率比较
- springMVC两种方式实现多文件上传及效率比较
- springMVC两种方式实现多文件上传及效率比较
- SpringMVC文件上传的两种方式
- 用SpringMVC实现的上传下载方式二(多文件上传)
- springMVC两种方式实现多文件上传及效率比较
- springMVC两种方式实现多文件上传及效率比较
- springMVC两种方式实现多文件上传及效率比较