JAVA調用FTP上傳文件

import java.io.File;
import java.io.FileInputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.junit.Test;public class FTPTest {
    @Test
    public void testFtpClient() throws Exception {
        //建立一個FtpClient對象
        FTPClient ftpClient = new FTPClient();
        //建立ftp鏈接。默認是21端口
        ftpClient.connect("localhost", 21);
        //登陸ftp服務器,使用用戶名和密碼
        ftpClient.login("fengmingyue", "15*********");
        //上傳文件。
        //讀取本地文件
        FileInputStream inputStream = new FileInputStream(new File("/Users/fengmingyue/Desktop/1946.jpg"));
        //設置上傳的路徑
        ftpClient.changeWorkingDirectory("/usr/local/Cellar/nginx/1.10.3/home/image");
        //修改上傳文件的格式
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
        //第一個參數:服務器端文檔名(即上傳到服務器上的文件名)
        //第二個參數:上傳文檔的inputStream
        ftpClient.storeFile("1946777.jpg", inputStream);
        //關閉鏈接
        ftpClient.logout();
    }
    //使用工具類
    @Test
    public void testFtpUtil() throws Exception {
        FileInputStream inputStream = new FileInputStream(new File("/Users/fengmingyue/Desktop/1946.jpg"));
        FtpUtil.uploadFile("localhost", 21, "fengmingyue", "15*******", "/usr/local/Cellar/nginx/1.10.3/home/image", "/2015/09/04", "hello222.jpg", inputStream);
    }
}

工具類:java

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

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;

/**
 * ftp上傳下載工具類
 */
public class FtpUtil {

    /** 
     * Description: 向FTP服務器上傳文件 
     * @param host FTP服務器hostname 
     * @param port FTP服務器端口 
     * @param username FTP登陸帳號 
     * @param password FTP登陸密碼 
     * @param basePath FTP服務器基礎目錄
     * @param filePath FTP服務器文件存放路徑。例如分日期存放:/2015/01/01。文件的路徑爲basePath+filePath
     * @param filename 上傳到FTP服務器上的文件名 
     * @param input 輸入流 
     * @return 成功返回true,不然返回false 
     */  
    public static boolean uploadFile(String host, int port, String username, String password, String basePath,
            String filePath, String filename, InputStream input) {
        boolean result = false;
        FTPClient ftp = new FTPClient();
        try {
            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 (!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 host FTP服務器hostname 
     * @param port FTP服務器端口 
     * @param username FTP登陸帳號 
     * @param password FTP登陸密碼 
     * @param remotePath FTP服務器上的相對路徑 
     * @param fileName 要下載的文件名 
     * @param localPath 下載後保存到本地的路徑 
     * @return 
     */  
    public static boolean downloadFile(String host, int port, String username, String password, 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;
    }
}
FtpUtil
相關文章
相關標籤/搜索