java下载文件时文件名中文乱码

下载文件时中文乱码是一个很常见的问题, 这不是第一次,但我希望它是最后一次了

这是个让人很头疼的问题, 明明在后台文件名还是正常的,为什么下载后文件名就乱码了呢

为什么会乱码:因为浏览器的编码和后台传的编码不一致,这就好比火星人(###)和水星人(***)用方言讲话,结果肯定是谁也听不懂,

那如何解决交流时语言不通的问题呢, 那就用一个统一的语言【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;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值