SpringMVC实现文件的上传和下载

一、文件的上传

大体可分为以下几步:

      1.导入架包;

      2.配置springmvc.xml文件;

      3.写上传文件的页面;

      4.写Controller层下的请求所对应的映射。

     Spring MVC 上下文中默认没有为文件上传提供了直接的支持因此默认情况下不能处理文件的上传工作如果想使用 Spring 的文件上传功能,需现在上下文中配置 CommonsMultipartResovler

    1.导入以下两个架包;

        commons-fileupload-1.3.1.jar
commons-io-2.4.jar

     2.配置springmvc.xml文件

<!-- 配置CommonsMultipartResolver -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="defaultEncoding" value="utf-8"></property><!-- 默认编码 -->
		<property name="maxUploadSize" value="102400"></property><!-- 以字节为单位,设置最大上传文件的大小限制 -->
	</bean>
    3.写上传文件的页面    

<form action="${pageContext.request.contextPath }/testUpload" method="post" enctype="multipart/form-data">
		file:<input type="file" name="photo"><br>
		desc:<input type="text" name="desc">
		<input type="submit" value="提交">
	</form>
注意:表单:POST请求,file类型,enctype="multipart/form-data"
     4. 写Controller层下的请求所对应的映射。

@RequestMapping(value="/testUpload",method=RequestMethod.POST)
	public String testUpload(HttpServletRequest request,@RequestParam(value="desc") String desc,@RequestParam(value="photo") CommonsMultipartFile file) throws IOException{
		ServletContext servletContext = request.getServletContext();
		//得到真实路径
		String realPath = servletContext.getRealPath("/upload");
		File file1 = new File(realPath);
		if(!file1.exists()){  //判断该文件是否存在,不存在将新建一个
			file1.mkdir();
		}
		OutputStream out;
		InputStream in;
		//uuid_name.jpg
		String prefix = UUID.randomUUID().toString();
		prefix = prefix.replace("-","");//将UUID中的-去掉
		String fileName = prefix+"_"+file.getOriginalFilename();
		//防止一个文件多次上传造成的重名的问题;getOriginalFilename获取上传文件的名字
		System.out.println(fileName);		
		out = new FileOutputStream(new File(realPath+"\\"+fileName));
		in = file.getInputStream();
		/*byte[] bt=new byte[1024];  原生态处理方法
		int a=0;
		while((a=in.read(bt))!=-1){
			out.write(bt,0,a);	
		}*/
		IOUtils.copy(in, out);
		out.close();
		in.close();
		return "success";
	}


二、文件的下载

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

@RequestMapping(value="/testdownload")
	public ResponseEntity<byte[]> testdownload(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 statusCode=HttpStatus.OK;//状态
		ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(body, headers, statusCode);
		in.close();
		return response;		
	}
}


转载于:https://www.cnblogs.com/mazhitao/p/7429448.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值