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; }