FTPClient 中文目录、中文文件名乱码、上传文件失败 解决方法

FTPClient上传中文目录、中文文件名乱码问题解决方法

本文使用的FTP工具包为 apache的 commons-net

起因:

    今天在做FTP上传时一直上传文件上传不了,(代码是跑通了,但是文件没上传上去);然后我就在网上拿下来的案例可以上传,感觉很奇怪!

问题:

     经过调试发现,下面这句上传文件的代码返回的是false,但是为什么他没有返回成功呢? 

 boolean storeFile = ftpClient.storeFile(String remote, InputStream local)


     经过一番查找,发现原来是remote为中文的问题,也就是文件名为中文就会上传失败!嗯,这很伤!
原因:

     根据各种百度出来的解释是:FTP协议里面,规定文件名编码为iso-8859-1,所以目录名或文件名需要转码。

解决:

     先把remote以现在的编码,也就是GBK编码转成byte数字,然后把byte数组转成 iso-8859-1编码即可

 remote = new String(remote.getBytes("GBK"),"iso-8859-1");
 boolean storeFile = ftpClient.storeFile(remote, local)


    这样确实可以传上去,床上去的文件的名称也是对的,但是另一个问题就出现了;当你下载、获取文件信息时,你可能得到一个乱码的文件名!

   解决方法如下:

// 获取文件列表或者文件时自己反转一下文件名称编码,使之不乱码
FTPFile[] listFiles = ftpClient.listFiles(path);
for (FTPFile ftpFile : listFiles) {
    byte[] bytes = ftpFile.getName().getBytes("iso-8859-1");
    ftpFile.setName(new String(bytes, "GBK"));
}
// 获取文件列表或者文件时自己反转一下文件名称编码,使之不乱吗
byte[] bytes = path.getBytes("GBK");
InputStream fileStream = ftpClient.retrieveFileStream(new String(bytes, "iso-8859-1"));
log.info("文件 {} 下载成功!", path);


 然后问题完美结局!
————————————————
版权声明:本文为CSDN博主「无需有太多」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35170213/article/details/80284730

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值