码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMVC笔记(五)文件的上传下载

时间:2017-08-24 21:28:35      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:属性   tin   ram   contex   bean   需要   stream   bsp   put   

一、SpringMVC实现文件的上传

Spring MVC 上下文中默认没有为文件上传提供了直接的支持,因 此默认情况下不能处理文件的上传工作,

如果想使用 Spring 的文件上传功能,需现在上下文中配置 CommonsMultipartResovler:

二、文件上传的步骤:
    1.加入jar包:
        commons-fileupload-1.3.1.jar
        commons-io-2.4.jar

   2.在SpringMVC配置文件中配置CommonsMultipartResovler

<!-- 配置文件上传 -->
	<bean  id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	   <property name="defaultEncoding" value="utf-8"></property>
	   <property name="maxUploadSize" value="1024000"></property>
	</bean>

   3.前端表单:注意:需要请求方式:POST,input类型:file,属性:enctype="multipart/form-data"

 <form action="${pageContext.request.contextPath }/testUpload" method="post" enctype="multipart/form-data">
     file:<input type="file" name="photo">
     desc:<input type="text" name="desc">
     <input type="submit" value="上传">
  </form>

    4.文件上传方法的实现

    

	@RequestMapping("/testUpload")
	public String testUpload(HttpServletRequest request,@RequestParam(value="desc",required=false)String desc,@RequestParam("photo") CommonsMultipartFile file){
		ServletContext servletContext = request.getServletContext();
		String realPath = servletContext.getRealPath("/upload");
		File file1 = new File(realPath);
		if(!file1.exists()){
			file1.mkdir();
		}
		OutputStream out = null;
		InputStream in = null;
		//uuid_name.jpg
		String prefix = UUID.randomUUID().toString();
		prefix = prefix.replace("-","");
		String fileName = prefix+"_"+file.getOriginalFilename();
		System.out.println(fileName);
		try {
			out = new FileOutputStream(new File(realPath+"\\"+fileName));
			in = file.getInputStream();
			//创建一个缓冲区
			byte buffer[]=new byte[1024];
			//判断输入流中的数据是否已经对完
			int len=0;
			//循环将输入流读入到缓冲区中(len=in.read(buffer)>0)表示in里面还有数据
			while((len=in.read(buffer))!=-1){
				//使用FileOutPutStream输出流,将缓冲区的数据输出到指定目录文件
				out.write(buffer,0,len);	
			}
		} catch (Exception   e) {
			e.printStackTrace();
		}
		//关闭输入流、输出流
		try {
			out.close();
			in.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return  "success";
	}

 三、文件的下载

        文件能上传就能下载

      1.用ResponseEntity<byte[]> 返回值完成文件下载:

@RequestMapping(value="/testDownLoad")
	public ResponseEntity<byte[]> testDonwLoad(HttpServletRequest request) throws Exception{
		ServletContext servletContext=request.getServletContext();
		String fileName="风吹麦浪.mp3";
		String realPath = servletContext.getRealPath("/WEB-INF/"+fileName);
		InputStream in=new FileInputStream(new File(realPath));
		byte [] body=new byte[in.available()];
		in.read(body);
		MultiValueMap<String, String> headers=new HttpHeaders();
		fileName=new String(fileName.getBytes("gbk"),"iso8859-1");
		headers.set("Content-Disposition", "attachment;filename="+fileName);
		HttpStatus status=HttpStatus.OK;
		ResponseEntity<byte []> responseEntity=new ResponseEntity<>(body, headers,status);
		in.close();
		return responseEntity;	
	}

 

SpringMVC笔记(五)文件的上传下载

标签:属性   tin   ram   contex   bean   需要   stream   bsp   put   

原文地址:http://www.cnblogs.com/Actexpler-S/p/7424999.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!