Spring mvc 文件上传 下载

本篇文章主要记录 上传下载 遇到的一些编码问题:自己的理解--->可能不准确

 @RequestMapping(value="/upload",method=RequestMethod.POST)
		 public String upload(HttpServletRequest request,
				@RequestParam("description") String description,
				@RequestParam("file") MultipartFile file) throws Exception{
			 
		    System.out.println(description);
		    // 如果文件不为空,写入上传路径
			if(!file.isEmpty()){
				// 上传文件路径
				String path = request.getSession().getServletContext().getRealPath(
		                "/images/");
				// 上传文件名
				String filename = file.getOriginalFilename();
			    File filepath = new File(path,filename);
				// 判断路径是否存在,如果不存在就创建一个
		        if (!filepath.getParentFile().exists()) { 
		        	filepath.getParentFile().mkdirs();
		        }
		        // 将上传文件保存到一个目标文件当中
		        String adf = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
				file.transferTo(new File(path+File.separator+adf+ filename));
				return "success";
			}else{
				return "error";
			}
			 
		 }

下载:

 <body>
    This is my JSP page. <br>
    <h3>文件下载</h3>
    <a href="download?filename=${requestScope.user.image.originalFilename}">
    	${requestScope.user.image.originalFilename }
    </a>
  </body>


 //文件下载
		 @RequestMapping(value="/download")
		 public ResponseEntity<byte[]> downlaod(
				 HttpServletRequest request,
				 @RequestParam("filename") String filename,
				 Model model
				 )throws Exception{
			 String ss = new String(filename.getBytes("iso-8859-1"),"UTF-8");
			 System.out.println(ss);
			 String path = request.getSession().getServletContext().getRealPath("/images");
			 File file = new File(path+File.separator+ss);
			 HttpHeaders headers = new HttpHeaders();
			 //下载显示的文件名 ,乱码处理
			 String downloadFileName = new String(ss.getBytes("UTF-8"),"iso-8859-1");
			 //浏览器以attachment 方式打开
			 headers.setContentDispositionFormData("attachment", downloadFileName);
			 headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
			 
			 return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers,HttpStatus.CREATED);
		 }
-------------------------------


在下载的时候是以超链接请求到 后台的,,也就是get请求,get请求的编码是

iso-8859-1:当文件的名字是中文的时候,传到后台会乱码,所以需要转码

String ss = new String(filename.getBytes("iso-8859-1"),"UTF-8");
浏览器的下载方式是:APPLICATION_OCTET_STREAM

application_octet_stream:二进制流数据,也就相当于 byte[] (二进制)数组,

byte:字节,所以需要将utf-8 再转这iso-8859-1

String downloadFileName = new String(ss.getBytes("UTF-8"),"iso-8859-1");





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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值