springmvc文件的上传与下载

1:先在springmvc.xml配置文件中加上MultipartResolver接口的实现类CommonsMultipartResolver的bean

1 <!-- 配置文件上传的MultipartResolver接口 -->
2     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
3         <property name="defaultEncoding" value="UTF-8"/>
4         <property name="maxUploadSize" value="1024000"/>
5     </bean>

2:在Handler中写代码

  1):利用file.transferTo()的方式进行上传。

 1 @RequestMapping("/testFileUpload")
 2     public String testFileUpload(@RequestParam("desc") String desc,@RequestParam("file") MultipartFile file) throws IOException{
 3         System.out.println("desc :"+ desc);
 4         System.out.println("file :"+ file.getOriginalFilename());
 5         System.out.println("InputStream :"+file.getInputStream());
 6         //得到文件上传的路径,就是文件上传到哪个地方
 7         String path="E:/springupload/" +file.getOriginalFilename();
 8         System.out.println(path);
 9         //上传
10         file.transferTo(new File(path));
11         return "success";
12     }

利用@RequestParam把页面上的值赋值给参数desc和file。然后利用file的getOriginalFilename()方法得到上传文件的名字。 利用file的transferTo()方法上传文件

  2):利用流的方式上传

 1 @RequestMapping("/testFileUpload")
 2     public String testFileUpload(@RequestParam("desc") String desc,@RequestParam("file") MultipartFile file) throws IOException{
 3         System.out.println("desc :"+ desc);
 4         System.out.println("file :"+ file.getOriginalFilename());
 5         System.out.println("InputStream :"+file.getInputStream());
 6         
 7         //上传
 8         //获取输出流。把要上传的文件路径和文件名放到输出流中
 9         OutputStream os=new FileOutputStream("E:/springupload/"+file.getOriginalFilename());
10         InputStream is=file.getInputStream();
11         int temp;
12         //is.read()读取上传的文件。=(-1):读到最后一个,然后写入到输出流中
13         while((temp=is.read())!=(-1)){
14             os.write(temp);
15         }
16         os.flush();
17         os.close();
18         is.close();
19         
20         return "success";
21     }

3:文件的下载

@RequestMapping("/testDownload")
    public ResponseEntity<byte[] > testDownload(HttpSession session) throws IOException{
        //得到文件的路径
        ServletContext servletContext=session.getServletContext();
        InputStream in=servletContext.getResourceAsStream("/WEB-INF/files/abc.txt");
        System.out.println(in);
        //创建一个与abc.txt文件一样大的byte[]数组。
        byte[] body=new byte[in.available()];
        in.read(body);
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Disposition", "attachment;filename=abc.txt");
        HttpStatus statusCode = HttpStatus.OK;
        /*使用 HttpMessageConverter<T> 将请求信息转化并绑定到处理方法的入 •
        参中或将响应结果转为对应类型的响应信息,Spring 提供了两种途径:
        使用 @RequestBody / @ResponseBody – 对处理方法进行标注
        使用 HttpEntity<T> / ResponseEntity<T> 作为处理方法的入参或返回– 值*/
        ResponseEntity<byte[]> response=new ResponseEntity<byte[]>(body, headers, statusCode);
        return response;
    }

 

posted @ 2017-12-19 23:19  陆伟  阅读(240)  评论(0编辑  收藏  举报