Spring mvc 文件上传 下载

来源:互联网 发布:淘宝上不显示淘龄 编辑:程序博客网 时间:2024/06/05 22:45

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

 @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");





原创粉丝点击