本篇文章主要记录 上传下载 遇到的一些编码问题:自己的理解--->可能不准确
@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");