FTP上传下载工具(避免中文乱码)

FTP上传下载工具(避免中文乱码)

具体内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import cn.gwssi.zygl.config.ZyglConstant;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import java.io.*;


/**
* @ProjectName: FTP上传下载工具类
* @Package: cn.gwssi.zygl.util
* @ClassName: FtpUtil
* @Description: java类作用描述
* @Author: 胡铭锋
* @CreateDate: 2018/4/16 9:53
* @Version: 1.0
*/
public class FtpUtil {

/**ftp服务器地址*/
public static String host = ZyglConstant.FTP_CONFIG_HOST;
/**ftp服务器端口号默认为21*/
public static Integer port = ZyglConstant.FTP_CONFIG_PORT ;
/**ftp登录账号*/
public static String username = ZyglConstant.FTP_CONFIG_USERNAME;
/**ftp登录密码*/
public static String password = ZyglConstant.FTP_CONFIG_PASSWORD;
/**FTP服务器基础目录*/
public static String basePath = ZyglConstant.FTP_CONFIG_BASEPATH;

/** 本地字符编码 */
private static String LOCAL_CHARSET = "GBK";

/** FTP协议里面,规定文件名编码为iso-8859-1 */
private static String SERVER_CHARSET = "ISO-8859-1";

/**
* 向FTP服务器上传文件
* @param filePath FTP服务器文件存放路径。例如分日期存放:/2017/03/01。文件的路径为basePath+filePath
* @param filename 上传到FTP服务器上的文件名
* @param input 输入流
* @return 成功返回true,否则返回false
*/
public static boolean uploadFile(String filePath, String filename, InputStream input){

boolean result = false;
FTPClient ftp = new FTPClient();
try {
filename = new String(filename.getBytes("GBK"), "ISO-8859-1");
// InputStream input = new FileInputStream(new File(inputfilename));
int reply;
ftp.connect(host, port);// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return result;
}
//针对中文乱码问题
if (FTPReply.isPositiveCompletion(ftp.sendCommand(
"OPTS UTF8", "ON"))) {// 开启服务器对UTF-8的支持,如果服务器支持就用UTF-8编码,否则就使用本地编码(GBK).
LOCAL_CHARSET = "UTF-8";
}
ftp.setControlEncoding(LOCAL_CHARSET);
//切换到上传目录
if (!ftp.changeWorkingDirectory(basePath+filePath)) {
//如果目录不存在创建目录
String[] dirs = filePath.split("/");
String tempPath = basePath;
for (String dir : dirs) {
if (null == dir || "".equals(dir)) continue;
tempPath += "/" + dir;
if (!ftp.changeWorkingDirectory(tempPath)) {
if (!ftp.makeDirectory(tempPath)) {
return result;
} else {
ftp.changeWorkingDirectory(tempPath);
}
}
}
}
//设置上传文件的类型为二进制类型
ftp.setFileType(FTP.BINARY_FILE_TYPE);
//上传文件
if (!ftp.storeFile(filename, input)) {
return result;
}
input.close();
ftp.logout();
result = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return result;

}

/**
* Description: 从FTP服务器下载文件
* @param remotePath FTP服务器上的相对路径
* @param fileName 要下载的文件名
* @param localPath 下载后保存到本地的路径
* @return
*/
public static boolean downloadFile(String remotePath, String fileName, String localPath) {
boolean result = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(host, port);
// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
ftp.login(username, password);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return result;
}
ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
FTPFile[] fs = ftp.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(fileName)) {
File localFile = new File(localPath + "/" + ff.getName());

OutputStream is = new FileOutputStream(localFile);
ftp.retrieveFile(ff.getName(), is);
is.close();
}
}

ftp.logout();
result = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return result;
}

本作品采用知识共享署名 4.0 中国大陆许可协议进行许可,欢迎转载,但转载请注明来自御前提笔小书童,并保持转载后文章内容的完整。本人保留所有版权相关权利。

本文链接:https://royalscholar.cn/2018/04/17/FTP上传下载工具(避免中文乱码)/

# FTP, JAVA

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×