-
Notifications
You must be signed in to change notification settings - Fork 0
/
FTPUpAndDown.java
215 lines (201 loc) · 5.6 KB
/
FTPUpAndDown.java
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
/*
* Copyright 2016-2018 the original author or authors.
*
* All right reserved by JiurongTech
*/
package com.jiurong.autotransfer;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.net.ftp.FTPClient;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
/**
* 提供ftp和sfpt上传下载功能
*
* @author zyz
* @since 1.0
*/
public class FTPUpAndDown {
/*
* @param username sftp服务器的用户名
*
* @param password sftp服务器的密码
*
* @param ip sftp服务器的访问ip
*
* @param port sftp服务的端口号
*
* @param filepath 文件上传之后的FullPath
*
* @param localfile 本地文件的File对象
*
* @throws FileNotFoundException,IOException,JSchException 用户名、密码、ip、端口号不正确
*/
public static void sftpUp(String username, String password, String ip, int port, String filepath, File localfile)
throws Exception {
Session session = null;
Channel channel = null;
JSch jsch = new JSch();
FileInputStream inStream = null;
try {
session = jsch.getSession(username, ip, port);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setPassword(password);
session.connect();
File file = new File(filepath);
channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftp = (ChannelSftp) channel;
sftp.cd(file.getParent());
inStream = new FileInputStream(localfile);
;
sftp.put(inStream, FilenameUtils.getName(filepath));
} finally {
if (inStream != null) {
inStream.close();
}
if (session != null) {
session.disconnect();
}
if (channel != null) {
channel.disconnect();
}
}
}
/*
*
* @param username sftp服务器的用户名
*
* @param password sftp服务器的密码
*
* @param ip sftp服务器的访问ip
*
* @param port sftp服务的端口号
*
* @param filepath 文件上传之后的FullPath
*
* @return file 返回下载到本地的File对象
*/
public static File sftpDown(String username, String password, String ip, int port, String filepath)
throws Exception {
Channel channel = null;
Session session = null;
JSch jsch = new JSch();
FileOutputStream outStream = null;
File localfile = null;
try {
session = jsch.getSession(username, ip, port);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(password);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftp = (ChannelSftp) channel;
File file = new File(filepath);
String tempfile = file.getName();
String extension = tempfile.substring(tempfile.indexOf('.')); // 文件后缀名
String basename = FilenameUtils.getBaseName(tempfile); // 文件名(不加后缀)
localfile = File.createTempFile(basename, extension);
outStream = new FileOutputStream(localfile);
sftp.get(filepath, outStream);
} finally {
if (outStream != null) {
outStream.close();
}
}
if (session != null) {
session.disconnect();
}
if (channel != null) {
channel.disconnect();
}
return localfile;
}
/*
*
* @param username sftp服务器的用户名
*
* @param password sftp服务器的密码
*
* @param ip sftp服务器的访问ip
*
* @param port sftp服务的端口号
*
* @param filepath 文件上传之后的FullPath
*
* @param localfile 本地文件的File对象
*
* @throws SocketException,IOException ,FileNotFoundException
*/
public static void ftpUp(String username, String password, String ip, int port, String filepath, File localfile)
throws Exception {
FTPClient ftpClient = new FTPClient();
FileInputStream inStream = null;
try {
ftpClient.connect(ip, port);
ftpClient.login(username, password);
inStream = new FileInputStream(localfile);
ftpClient.setBufferSize(1024);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile(filepath, inStream);
} finally {
if (inStream != null) {
inStream.close();
}
if (ftpClient != null) {
ftpClient.disconnect();
}
}
}
/*
*
* @param username sftp服务器的用户名
*
* @param password sftp服务器的密码
*
* @param ip sftp服务器的访问ip
*
* @param port sftp服务的端口号
*
* @param filepath 文件上传之后的FullPath
*
* @return file 返回下载到本地的File对象
*
* @throws SocketException,IOException ,FileNotFoundException
*/
public static File ftpDown(String username, String password, String ip, int port, String filepath)
throws Exception {
FTPClient ftpClient = new FTPClient();
FileOutputStream outSteam = null;
File localfile = null;
try {
ftpClient.connect(ip, port);
ftpClient.login(username, password);
File file = new File(filepath);
String tempfile = file.getName();
String extension = tempfile.substring(tempfile.indexOf('.'));// 文件后缀名
String basename = FilenameUtils.getBaseName(tempfile); // 文件名(不加后缀)
localfile = File.createTempFile(basename, extension);
outSteam = new FileOutputStream(localfile);
ftpClient.setBufferSize(1024);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.retrieveFile(filepath, outSteam);
outSteam.flush();
} finally {
if (outSteam != null) {
outSteam.close();
}
if (ftpClient != null) {
ftpClient.disconnect();
}
}
return localfile;
}
}