java 文件上传txt文件出现乱码问题

OSS文件上传乱码

原代码是直接调用了putObject()方法(如下),并没有设置文件类型,这种情况下,阿里云会根据文件类型默认将txt文件的ContentType为text/plain,而这是导致其在浏览器出现乱码的原因。

PutObjectResult result = ossClient.putObject(newBucket, fileUrl.toString(), file.getInputStream());

目前我的解决方法是,在调用putObject()方法前,自定义设置文件类型为text/plain;charset=utf-8 或 application/json:

PutObjectResult result=null;
  /**
   * 阿里云txt文件上传后,预览/下载会出现乱码,
   * 原因是:阿里云根据文件类型默认设置的ContentType为text/plain
   * 解决方法:上传前判断文件类型,如果是txt文件,则自定义设置ContentType为text/plain;charset=utf-8  或 application/json
   */
  //获取文件类型
  String type = FileTypeFilter.getType(file);
  if ("txt".equals(type)){
      // 创建上传文件的Metadata。
      ObjectMetadata objectMetadata = new ObjectMetadata();
      // 指定上传的内容类型(下面两种都可以)
      objectMetadata.setContentType("text/plain;charset=utf-8");
//                objectMetadata.setContentType("application/json");
      result = ossClient.putObject(newBucket, fileUrl.toString(), file.getInputStream(),objectMetadata);
  }else {
      result = ossClient.putObject(newBucket, fileUrl.toString(), file.getInputStream());
  }

这种情况就不会出现了乱码问题了!

本地服务器乱码问题

和OSS大同小异,将txt文件的编码指定一下。
得说一下,可能是服务器的设置问题(具体还不清楚),我目前的解决方式是将txt文件以UTF-8读取,再以GBK写入,最后上传。

/** 处理:判断文件类型为txt时,将编码转成GBK  修改人:修改时间:2024/7/25 15:42 */
    boolean b = orgName.endsWith("txt");
    BufferedReader bufferedReader =null;
    BufferedWriter bufferedWriter =null;
    if (b){
        InputStreamReader reader = new InputStreamReader(input, "UTF-8");
        bufferedReader = new BufferedReader(reader);
        bufferedWriter = new BufferedWriter(new OutputStreamWriter(out, "GBK"));
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            bufferedWriter.write(line+ "\r\n");
        }
    }
    IOUtils.copy(input, out);
    if (b){
        bufferedWriter.close();
        bufferedReader.close();
    }
    out.close();

目前先这样记录啦!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值