|  |  |  | 
|---|
|  |  |  | @Slf4j | 
|---|
|  |  |  | public class FtpUtil { | 
|---|
|  |  |  | public FTPClient ftpClient = new FTPClient(); | 
|---|
|  |  |  | public static String hostname; | 
|---|
|  |  |  | public static int port; | 
|---|
|  |  |  | public static String username; | 
|---|
|  |  |  | public static  String password; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public FtpUtil() { | 
|---|
|  |  |  | // 设置将过程中使用到的命令输出到控制台 | 
|---|
|  |  |  | 
|---|
|  |  |  | public FtpUtil(String hostname, int port, String username, String password) | 
|---|
|  |  |  | throws IOException { | 
|---|
|  |  |  | // 设置将过程中使用到的命令输出到控制台 | 
|---|
|  |  |  | connect(hostname, port, username, password); | 
|---|
|  |  |  | FtpUtil.hostname =hostname; | 
|---|
|  |  |  | FtpUtil.port =port; | 
|---|
|  |  |  | FtpUtil.username =username; | 
|---|
|  |  |  | FtpUtil.password =password; | 
|---|
|  |  |  | connect(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** */ | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 连接到FTP服务器 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param hostname | 
|---|
|  |  |  | *            主机名 | 
|---|
|  |  |  | * @param port | 
|---|
|  |  |  | *            端口 | 
|---|
|  |  |  | * @param username | 
|---|
|  |  |  | *            用户名 | 
|---|
|  |  |  | * @param password | 
|---|
|  |  |  | *            密码 | 
|---|
|  |  |  | * @return 是否连接成功 | 
|---|
|  |  |  | * @throws IOException | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public boolean connect(String hostname, int port, String username, | 
|---|
|  |  |  | String password) throws IOException { | 
|---|
|  |  |  | public boolean connect() throws IOException { | 
|---|
|  |  |  | ftpClient.connect(hostname, port); | 
|---|
|  |  |  | ftpClient.setControlEncoding("GBK"); | 
|---|
|  |  |  | if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public boolean uploadInputstream(InputStream inputStream, String remote)  { | 
|---|
|  |  |  | // 设置PassiveMode传输 | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | ftpClient.enterLocalPassiveMode(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 设置以二进制流的方式传输 | 
|---|
|  |  |  | ftpClient.setFileType(FTP.BINARY_FILE_TYPE); | 
|---|
|  |  |  | ftpClient.setControlEncoding("GBK"); | 
|---|
|  |  |  | // 对远程目录的处理 | 
|---|
|  |  |  | String remoteFileName = remote; | 
|---|
|  |  |  | if (remote.contains("/")) { | 
|---|
|  |  |  | remoteFileName = remote.substring(remote.lastIndexOf("/") + 1); | 
|---|
|  |  |  | // 创建服务器远程目录结构,创建失败直接返回 | 
|---|
|  |  |  | if (StringUtils.equals(CreateDirecroty(remote, ftpClient), "2")) { | 
|---|
|  |  |  | log.error("创建ftp目录失败======================="+remote); | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | boolean result = ftpClient.storeFile(remoteFileName, inputStream); | 
|---|
|  |  |  | inputStream.close(); | 
|---|
|  |  |  | ftpClient.logout(); | 
|---|
|  |  |  | if(result){ | 
|---|
|  |  |  | log.info("上传文件成功======================"+remote); | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | log.error("上传文件失败======================="+remote); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | log.error("上传文件失败======================="+remote); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | public int getNumFromStr(String str,char searchstr) { | 
|---|
|  |  |  | int count = 0; | 
|---|
|  |  |  | char[] charArray = str.toCharArray(); | 
|---|
|  |  |  | 
|---|
|  |  |  | String result; | 
|---|
|  |  |  | // 对远程目录的处理 | 
|---|
|  |  |  | String remoteFileName = remote ; | 
|---|
|  |  |  | if (remote.contains(File.separator)) { | 
|---|
|  |  |  | remoteFileName = remote.substring(remote.lastIndexOf(File.separator) + 1); | 
|---|
|  |  |  | if (remote.contains("/")) { | 
|---|
|  |  |  | remoteFileName = remote.substring(remote.lastIndexOf("/") + 1); | 
|---|
|  |  |  | // 创建服务器远程目录结构,创建失败直接返回 | 
|---|
|  |  |  | if (StringUtils.equals(CreateDirecroty(remote, ftpClient), "2")) { | 
|---|
|  |  |  | return "2"; | 
|---|
|  |  |  | 
|---|
|  |  |  | throws IOException { | 
|---|
|  |  |  | String status = "1"; | 
|---|
|  |  |  | // UploadStatus status = UploadStatus.Create_Directory_Success; | 
|---|
|  |  |  | String directory = remote.substring(0, remote.lastIndexOf(File.separator) + 1); | 
|---|
|  |  |  | if (!directory.equalsIgnoreCase(File.separator) | 
|---|
|  |  |  | String directory = remote.substring(0, remote.lastIndexOf("/") + 1); | 
|---|
|  |  |  | if (!directory.equalsIgnoreCase("/") | 
|---|
|  |  |  | && !ftpClient.changeWorkingDirectory(new String(directory | 
|---|
|  |  |  | .getBytes("GBK"), "iso-8859-1"))) { | 
|---|
|  |  |  | // 如果远程目录不存在,则递归创建远程服务器目录 | 
|---|
|  |  |  | int start = 0; | 
|---|
|  |  |  | int end = 0; | 
|---|
|  |  |  | if (directory.startsWith(File.separator)) { | 
|---|
|  |  |  | if (directory.startsWith("/")) { | 
|---|
|  |  |  | start = 1; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | start = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | end = directory | 
|---|
|  |  |  | .indexOf(File.separator, start); | 
|---|
|  |  |  | .indexOf("/", start); | 
|---|
|  |  |  | while (true) { | 
|---|
|  |  |  | String subDirectory = new String(remote.substring(start, end) | 
|---|
|  |  |  | .getBytes("GBK"), "iso-8859-1"); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | start = end + 1; | 
|---|
|  |  |  | end = directory.indexOf(File.separator, | 
|---|
|  |  |  | end = directory.indexOf("/", | 
|---|
|  |  |  | start); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 检查所有目录是否创建完毕 | 
|---|
|  |  |  | 
|---|
|  |  |  | public static void main(String[] args) throws Exception { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | FtpUtil ftpUtil = new FtpUtil("175.27.187.84", 21, "ftpuser","doumee168" ); | 
|---|
|  |  |  | ftpUtil.uploadOnlineFile("https://profile-avatar.csdnimg.cn/default.jpg!1", "test"+File.separator, UUID.randomUUID().toString()+"test.jpg"); | 
|---|
|  |  |  | ftpUtil.uploadOnlineFile("https://profile-avatar.csdnimg.cn/default.jpg!1", "test"+"/", UUID.randomUUID().toString()+"test.jpg"); | 
|---|
|  |  |  | /*FtpUtil myFtp = new FtpUtil("106.15.54.228", 21, "ftptlg", | 
|---|
|  |  |  | "tlg168.com"); | 
|---|
|  |  |  | System.out.println(myFtp.upload("D:\\devices.sql", "/1111/devices.sql")); | 
|---|
|  |  |  | 
|---|
|  |  |  | String remoteDirectoryPath) throws Exception { | 
|---|
|  |  |  | File src = new File(localDirectory); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | remoteDirectoryPath =  remoteDirectoryPath  + File.separator; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //         System.out.println(remoteDirectoryPath+":===============创建目录================="); | 
|---|
|  |  |  | remoteDirectoryPath =  remoteDirectoryPath  + "/"; | 
|---|
|  |  |  | boolean makeDirFlag = this.ftpClient.makeDirectory(remoteDirectoryPath); | 
|---|
|  |  |  | }catch (IOException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | 
|---|
|  |  |  | for (int currentFile = 0;currentFile < allFile.length;currentFile++) { | 
|---|
|  |  |  | File f =allFile[currentFile]; | 
|---|
|  |  |  | String srcName=   f.getPath().toString(); | 
|---|
|  |  |  | //         System.out.println(srcName+":====================读取文件======================"); | 
|---|
|  |  |  | String tPath = remoteDirectoryPath+f.getName(); | 
|---|
|  |  |  | if (!f.isDirectory()) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //            System.out.println(srcName+":====================开始传输文件======================"); | 
|---|
|  |  |  | int dNum = getNumFromStr(tPath,File.separator.toCharArray()[0]); | 
|---|
|  |  |  | int dNum = getNumFromStr(tPath,"/".toCharArray()[0]); | 
|---|
|  |  |  | uploadFile(f, tPath); | 
|---|
|  |  |  | if(dNum -2>=0){ | 
|---|
|  |  |  | for (int i = 0; i < dNum-1; i++) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | //            System.out.println(srcName+":====================创建子目录======================"); | 
|---|
|  |  |  | uploadDirectory(srcName, | 
|---|
|  |  |  | tPath+File.separator); | 
|---|
|  |  |  | tPath+"/"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //         System.out.println(srcName+":====================上传完毕======================"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | * */ | 
|---|
|  |  |  | public boolean delDirectory(String pathName ) throws Exception { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | this.ftpClient.changeWorkingDirectory( pathName.substring(0, pathName.lastIndexOf(File.separator)) ); | 
|---|
|  |  |  | this.ftpClient.changeWorkingDirectory( pathName.substring(0, pathName.lastIndexOf("/")) ); | 
|---|
|  |  |  | ftpClient.removeDirectory(pathName); | 
|---|
|  |  |  | }catch (IOException e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|