FTPClient 中文目录、中文文件名乱码、上传文件失败 解决方法 |
您所在的位置:网站首页 › 为什么上传的文件是乱码呢 › 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); 然后问题完美结局! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |