SpringMvc的上传和下载-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

SpringMvc的上传和下载

简介: 第一步:配置文件加入上传和下载的全部配置文件参考上上篇博文 1 2 3 4 5 6 7 View Code 第二步:WEB-INF/lib下必加入:commons-fileupload.

第一步:配置文件加入上传和下载的<bean>全部配置文件参考上上篇博文

1 <!-- 配置springMVC上传文件和下载文件 -->
2     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
3         <property name="defaultEncoding" value="utf-8"></property><!-- 编码格式,与jsp格式一致 -->
4         <property name="maxUploadSize" value="52428880"></property><!-- 文件上传的最大限制 5mb -->
5         <property name="uploadTempDir" value="upload/temp"></property><!-- 上传文件的临时路径。文件上传后,会自动消失 -->
6         <property name="maxInMemorySize" value="4096"/> 
7     </bean>
View Code

第二步:WEB-INF/lib下必加入:commons-fileupload.jar与commons-io-1.4.jar二个文件
第三步:表单属性为: enctype="multipart/form-data"

单文件上传的Controller中的方法

 1     /**
 2      * SpringMVC的文件上传
 3      * 【1】上传的文件,会自动被绑定到MultipartFile的对象中。该对象的api
 4      *         (1)byte[] getBytes()获取文件数据
 5      *         (2)String getContentType()获取文件的MIME类型,如image/pjpeg,text/plain等
 6      *         (3)InputStream getInputStream()获取文件流
 7      *         (4)Sring getName()获取表单中文件组件的名称
 8      *         (5)String getOriginalFilename()获取上传文件的原名
 9      *         (6)long getSize()获取文件的字节大小,单位为byte
10      *         (7)boolean isEmpty():是否有上传的文件
11      *         (8)void transferTo(File dest) 可以使用给文件将上传文件保存到一个目标目录下        
12     * @Title: uploadMyPictrue 
13     * @Description: TODO(这里用一句话描述这个方法的作用) 
14     * @param file 为前台form表单中<input type="file" name="file"/>中的name
15     * @return
16     * @return String    返回类型 
17     * @author 尚晓飞
18     * @date 2014-10-31 下午2:01:23
19      */
20     @RequestMapping("/uploadMyPictrue")
21     public String  uploadMyPictrue(HttpServletRequest request,@RequestParam("file") MultipartFile file){
22         System.out.println("StudentController.uploadMyPictrue()");
23         boolean flag=file.isEmpty();
24         if(!file.isEmpty()){
25             String mimesString=file.getContentType();//获取mime类型
26             System.out.println("MiME:"+mimesString);//MiME:image/jpeg
27             long size=file.getSize();
28             System.out.println("size:"+size);//size:89067
29             String nameString=file.getName();
30             System.out.println("组件名称:"+nameString);//组件名称:file
31             String realName=file.getOriginalFilename();
32             System.out.println("文件原名:"+realName);//文件原名:图片.jpg
33             
34             //获取项目跟目录
35             String path=request.getSession().getServletContext().getRealPath("");
36             //拼接上传文件的存放目录
37             path=path+"/uploadfile";
38             //为上传文件起一个新名字
39             Integer index=realName.lastIndexOf(".");
40             String suffix=realName.substring(index);
41             //获取当前时间戳
42             long fileNam=System.currentTimeMillis();
43             String fileNames=fileNam+suffix;//新的完整文件名
44             String pathString=path+"/"+fileNames;
45             File file2=new File(pathString);
46             
47             if(!file2.exists()){
48                 file2.mkdir();//不存在就创建文件
49             }
50             //将文件上传到项目制定的目录下
51             
52             try {
53                 file.transferTo(file2);
54             } catch (IllegalStateException e) {
55                 // TODO Auto-generated catch block
56                 e.printStackTrace();
57             } catch (IOException e) {
58                 // TODO Auto-generated catch block
59                 e.printStackTrace();
60             }finally{
61                 
62             }
63             
64             
65         }else{
66             //上传文件为空
67         }
68         return "/page/success";
69     }
View Code

多文件上传的controller中的方法

 1     /**
 2      * 多文件上传
 3     * @Title: moreUploadFile 
 4     * @Description: TODO(这里用一句话描述这个方法的作用) 
 5     * @param request
 6     * @param response
 7     * @param errors
 8     * @return
 9     * @return String    返回类型 
10     * @author 尚晓飞
11     * @date 2014-10-31 下午3:12:16
12      */
13     @RequestMapping("/moreUploadFile")
14     public String moreUploadFile(HttpServletRequest request,HttpServletResponse response ){
15         //将请求作用域转换成上传作用域
16         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; 
17         //获取封装了多个上传文件的map
18         Map<String, MultipartFile> fileMap=multipartRequest.getFileMap();
19         //获取项目根目录
20         String rootPath=request.getSession().getServletContext().getRealPath("");
21         //拼接上传目录
22         rootPath=rootPath+"\\uploadfile";
23         //逐个上传文件
24         Set<String> set=fileMap.keySet();
25         for(String name:set){
26             //该name的值,为前台form表单中<input type="file" name="xxx">中的xxx
27             MultipartFile file=fileMap.get(name);
28             String filename=file.getOriginalFilename();
29             String fileName=file.getName();//获取组件名 此处的值也是xxx的值
30             File file2=new File(rootPath+"\\"+filename);
31             if(file2.exists()){
32                 file2.mkdir();
33             }
34             try {
35                 file.transferTo(file2);
36             } catch (IllegalStateException e) {
37                 // TODO Auto-generated catch block
38                 e.printStackTrace();
39             } catch (IOException e) {
40                 // TODO Auto-generated catch block
41                 e.printStackTrace();
42             }
43             
44         }
45         
46         
47         
48         return "/page/success";
49     }
View Code

文件下载的controller中的方法

 1     /**
 2      * 文件下载
 3     * @Title: downLoadFile 
 4     * @Description: TODO(这里用一句话描述这个方法的作用) 
 5     * @param request
 6     * @param response
 7     * @return void    返回类型 
 8     * @author 尚晓飞
 9     * @date 2014-10-31 下午3:53:16
10      */
11     @RequestMapping("/downLoadFile")
12     public void downLoadFile(String name,HttpServletRequest request,HttpServletResponse response){
13         //模拟从数据库查处文件的名
14         String fileName=name;
15         //拼接文件全路径
16         String rootPath=request.getSession().getServletContext().getRealPath("\\uploadfile")+"\\"+name;
17         //生成文件
18         File file=new File(rootPath);
19         long fileLength =file.length();//获取文件的大小  
20         
21         //输入流和输出流
22         BufferedInputStream bis = null;  
23         BufferedOutputStream bos = null;  
24         
25         
26         try {
27             //设置下载的参数配置
28             response.setContentType("text/html;charset=utf-8");  
29             request.setCharacterEncoding("UTF-8");
30             response.setContentType("application/x-msdownload;");  
31             String files= new String(fileName.getBytes("utf-8"), "ISO8859-1");
32             response.setHeader("Content-disposition", "attachment; filename="+files);  
33             response.setHeader("Content-Length", String.valueOf(fileLength));  
34             
35             //添加输入流
36             bis=new BufferedInputStream(new FileInputStream(file));
37             //添加输出流
38             bos=new BufferedOutputStream(response.getOutputStream());
39             byte[] buff = new byte[2048];  
40             int bytesRead;  
41             while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {  
42                 bos.write(buff, 0, bytesRead);  
43             }      
44             
45         } catch (Exception e) {
46             // TODO Auto-generated catch block
47             e.printStackTrace();
48         }finally{
49             try {
50                 if(bis!=null){
51                     bis.close();
52                 }
53                 if(bos!=null){
54                     bos.close();
55                 }
56             } catch (IOException e) {
57                     // TODO Auto-generated catch block
58                     e.printStackTrace();
59             }
60             
61         }  
62         
63         
64     }
View Code

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章