由于工作原因需要使用FTP上传文件,而且需要上传到两个不同的FTP,但是之前使用的是读取配置文件的方式,并不是很方便每天上传到两个不同的FTP,搬砖整理一波!
如果需要上传图片类型的,就需要把文件转换为二进制
public static void testUpload() {
FTPClient ftpClient = new FTPClient();
FileInputStream fis = null;
try {
ftpClient.connect("ip");
ftpClient.login("用户名", "密码");
File srcFile = new File("需要上传的文件");
fis = new FileInputStream(srcFile);
//设置上传目录
ftpClient.changeWorkingDirectory("/admin/pic");
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("UTF-8");
//设置文件类型(二进制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile("weixin_20180511.gif", fis);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("FTP客户端出错!", e);
} finally {
IOUtils.closeQuietly(fis);
try {
System.out.println("开始上传");
ftpClient.disconnect();
System.out.println("上传结束");
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("关闭FTP连接发生异常!", e);
}
}
}
上传文件或文件夹,或者从FTP进行下载
private FTPClient ftp;
/**
* @param path 上传到ftp服务器哪个路径下
* @param addr 地址
* @param port 端口号
* @param username 用户名
* @param password 密码
* @return
* @throws Exception
*/
private boolean connect(String path, String addr, int port, String username, String password) throws Exception {
boolean result = false;
ftp = new FTPClient();
int reply;
ftp.connect(addr, port);
ftp.login(username, password);
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return result;
}
ftp.changeWorkingDirectory(path);
result = true;
return result;
}
/**
* @param file 上传的文件或文件夹
* @throws Exception
*/
private void upload(File file) throws Exception {
if (file.isDirectory()) {
ftp.makeDirectory(file.getName());
ftp.changeWorkingDirectory(file.getName());
String[] files = file.list();
for (int i = 0; i < files.length; i++) {
File file1 = new File(file.getPath() + "\\" + files[i]);
if (file1.isDirectory()) {
upload(file1);
ftp.changeToParentDirectory();
} else {
File file2 = new File(file.getPath() + "\\" + files[i]);
FileInputStream input = new FileInputStream(file2);
ftp.storeFile(file2.getName(), input);
input.close();
}
}
} else {
File file2 = new File(file.getPath());
FileInputStream input = new FileInputStream(file2);
ftp.storeFile(file2.getName(), input);
input.close();
}
}
//下载
public void downLoad(String ftpFile, String dstFile) throws IOException {
File file = new File(dstFile);
FileOutputStream fos = new FileOutputStream(file);
ftp.retrieveFile(ftpFile, fos);
fos.close();
}
public static void main(String[] args) {
PlatformTask t = new PlatformTask();
try {
t.connect("", "localhost", 21, "user", "pwd");
File file = new File("文件名");
t.upload(file);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}