import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
/**
* FTP工具类
*
* @author 13074110
*/
public class FtpUtil {
/**
* @param url
* 远程机器IP
* @param port
* ftp 端口 21
* @param username
* 用户名
* @param password
* 密码
* @param path
* 服务器上的文件路径
* @param filename
* 上传服务器上的文件名
* @param input
* 输入流(把上传的文件转为输入流)
* @return
* @throws IOException
* @throws SocketException
*/
public static String uploadFile(String ip, int port ,String username,
String password, String path,String definePath, String filename,
InputStream input)throws IOException
{
String[] defines = null;
FTPClient ftp = null;
if(ftp == null)
{
ftp = createConnection( ip, port, username,password);
}
if(!ftp.isConnected())
{
ftp.connect(ip);
ftp.login(username, password);
int reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply))
{
ftp.disconnect();
return null;
}
}
//ftp.enterLocalPassiveMode();
// 转到指定上传目录
defines = definePath.split("/");
boolean ishave = ftp.changeWorkingDirectory(path+definePath);
if(ishave){
ftp.setFileType(FTP.BINARY_FILE_TYPE);
// 将上传文件存储到指定目录
ftp.storeFile(filename, input);
}else{
boolean createsuccess = false;//ftp.makeDirectory(path.substring(0,path.lastIndexOf("/")));
String tempPath = path;
for(int i = 0 ; i < defines.length ; i ++){
tempPath = tempPath.concat(defines[i]).concat("/");
if(ftp.changeWorkingDirectory(tempPath)){
continue;
}else{
createsuccess = ftp.makeDirectory(tempPath);
}
//如果当前子目录创建失败,不继续创建下层子目录
if(!createsuccess){
break;
}
}
if(createsuccess){
ftp.changeWorkingDirectory(path+definePath);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
// 将上传文件存储到指定目录
ftp.storeFile(filename, input);
}
}
// 关闭输入流
input.close();
closeConnection(ftp);
return path+filename;
}
public static FTPClient createConnection(String ip, int port,
String username,String password) throws IOException
{
// 创建FTPClient对象
FTPClient ftp = new FTPClient();
int reply;
// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
ftp.connect(ip);
// 登录ftp
ftp.login(username, password);
// 看返回的值是不是230,如果是,表示登录成功
reply = ftp.getReplyCode();
// 以2开头的返回值就会为真
if (!FTPReply.isPositiveCompletion(reply))
{
ftp.disconnect();
return null;
}
return ftp;
}
public static void closeConnection(FTPClient ftp) throws IOException
{
// 退出ftp
ftp.logout();
if (ftp.isConnected())
{
ftp.disconnect();
}
}
}
FTP工具类
最新推荐文章于 2023-10-19 17:45:42 发布