下载文件时中文乱码是一个很常见的问题, 这不是第一次,但我希望它是最后一次了
这是个让人很头疼的问题, 明明在后台文件名还是正常的,为什么下载后文件名就乱码了呢
为什么会乱码:因为浏览器的编码和后台传的编码不一致,这就好比火星人(###)和水星人(***)用方言讲话,结果肯定是谁也听不懂,
那如何解决交流时语言不通的问题呢, 那就用一个统一的语言【UTF-8】作为双方的沟通的语言吧
附下载方法
@ApiOperation("MinIO文件下载")
@GetMapping("/generateFileDown")
public BaseRetBean generateFileDown(
@ApiParam(value = "主键编号",required = true) @RequestParam(value = "id",required = true) String id,
HttpServletResponse response
) throws Exception {
BaseRetBean baseRetBean = new BaseRetBean();
// 自己的业务逻辑
GmFileBean gmFileBean = workOrderService.queryFileById(id);
if (gmFileBean==null) {
baseRetBean.setRet(0);
baseRetBean.setMsg("对象为空");
return baseRetBean;
}
String fileName = gmFileBean.getFile_name();
// 存储桶名称
String bucketName="work-order";
InputStream inputStream = minioUtil.getObject(bucketName,gmFileBean.getData());
// 数据为空
if (inputStream == null) {
baseRetBean.setRet(0);
baseRetBean.setMsg("文件为空");
return baseRetBean;
}
byte[] data = inputStreamToByteArray(inputStream);
try {
// 清除第一行
response.reset();
// 用于描述HTTP消息实体的传输长度
response.addHeader("Content-Length", "" + data.length);
// Content-disposition 以附件的方式下载文件, 文件名用encode编码
response.setHeader("Content-Disposition", "attachment; filename=\""+ URLEncoder.encode(fileName,"utf-8")+"\"");
// 告诉浏览器文件的编码格式
response.setContentType("application/"+gmFileBean.getType()+";charset=UTF-8");
IOUtils.write(data, response.getOutputStream());
} catch (Exception ex) {
ex.printStackTrace();
}
baseRetBean.setRet(1);
baseRetBean.setMsg("查询成功");
return baseRetBean;
}