java 使用ftp文件服务
本文讲述如何在
java
做工使用ftp
文件服务, 进行文件上传
,下载
等操作以及如何解决
中文乱码
,文件损坏
等问题
依赖
<!-- https://mvnrepository.com/artifact/commons-net/commons-net -->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.7</version>
</dependency>
解决中文文件乱码
中出现乱码一般都是由于编码问题导致
ftp传输协议定义的编码为
iso-8859-1
将文件名和文件夹名转码再通过ftpClient
操作
/** 转码代码参考 */
private static String to_Iso8859_1(String str) {
if (StringUtils.isBlank(str)) return str;
return new String(str.getBytes(), StandardCharsets.ISO_8859_1);
}
如果项目使用了指定的编码可以在字符串转
byte数组
时候加上指定编码如:
str.getBytes("GBK")
解决文件损坏
测试中我发现经过传输部分文件出现异常…
异常场景: 我有两张图片(
2.5m的png
和205.8k的jpg
), 这两个文件上传到ftp服务器
均正常(可以正常打开, 且打开后图片无异常)但是我再通过再
java
用ftp
协议拉到本地的时候图片出现了不同程度的异常
2.5m的png
: 无法打开(打开直接报文件损坏)205.8k的jpg
: 可以打开, 但是图片中有部分是错位的直接使用别的方式拉取图片到本地两张图片均正常(说明在
ftp服务器
上的文件是好的)
解决方案:
上传和下载均加上如下代码(使用二进制的方式传输文件)
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);