Заливка файла на FTP средствами java

349
15 июля 2017, 07:09

Хочу научиться заливать файл на ftp сервер, но не выходит. Использую Apache commons net API.

Можно ли сделать это с локальным сервером? Если да, то каким и как настроить? Ибо с FileZilla и Денвером у меня ничего не вышло, видимо что-то упустил.

И если не трудно, напишите какой сервер должен быть, если захочу залить уже удалённо, хотя бы название, чтобы потом не задавать вопрос снова.

Класс FTPUtil:

public class FTPUtil {
    public static void uploadDirectory(FTPClient ftpClient,
                                       String remoteDirPath,
                                       String localParentDir,
                                       String remoteParentDir) throws IOException {
        System.out.println("LISTING directory: " + localParentDir);
        File localDir = new File(localParentDir);
        File[] subFiles = localDir.listFiles();
        if (subFiles != null && subFiles.length > 0) {
            for (File item : subFiles) {
                String remoteFilePath = remoteDirPath + "/" + remoteParentDir
                        + "/" + item.getName();
                if (remoteParentDir.equals("")) {
                    remoteFilePath = remoteDirPath + "/" + item.getName();
                }
                if (item.isFile()) {
                    // upload the file
                    String localFilePath = item.getAbsolutePath();
                    System.out.println("About to upload the file: " + localFilePath);
                    boolean uploaded = uploadSingleFile(ftpClient,
                            localFilePath, remoteFilePath);
                    if (uploaded) {
                        System.out.println("UPLOADED a file to: "
                                + remoteFilePath);
                    } else {
                        System.out.println("COULD NOT upload the file: "
                                + localFilePath);
                    }
                } else {
                    // create directory on the server
                    boolean created = ftpClient.makeDirectory(remoteFilePath);
                    if (created) {
                        System.out.println("CREATED the directory: "
                                + remoteFilePath);
                    } else {
                        System.out.println("COULD NOT create the directory: "
                                + remoteFilePath);
                    }
                    // upload the sub directory
                    String parent = remoteParentDir + "/" + item.getName();
                    if (remoteParentDir.equals("")) {
                        parent = item.getName();
                    }
                    localParentDir = item.getAbsolutePath();
                    uploadDirectory(ftpClient, remoteDirPath, localParentDir,
                            parent);
                }
            }
        }
    }
    public static boolean uploadSingleFile(FTPClient ftpClient,
                                           String localFilePath, String remoteFilePath) throws IOException {
        File localFile = new File(localFilePath);
        InputStream inputStream = new FileInputStream(localFile);
        try {
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            return ftpClient.storeFile(remoteFilePath, inputStream);
        } finally {
            inputStream.close();
        }
    }
}

MainApp:

public class MainApp {
    public static void main(String[] args) {
        String server = "127.0.0.1";
        int port = 14147;
        String user = "user";
        String pass = "pass";
        FTPClient ftpClient = new FTPClient();
        try {
            // connect and login to the server
            ftpClient.connect(server, port);
            // use local passive mode to pass firewall
            ftpClient.enterLocalPassiveMode();
            ftpClient.login(user, pass);
            System.out.println("Connected");
            String remoteDirPath = "D:/WebServer";
            String localDirPath = "D:/Учёба/Сети Тяпаев/Лабы";
            FTPUtil.uploadDirectory(ftpClient, remoteDirPath, localDirPath, "");
            // log out and disconnect from the server
            ftpClient.logout();
            ftpClient.disconnect();
            System.out.println("Disconnected");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
READ ALSO
Не удаляются дубликаты в LinkedHashSet

Не удаляются дубликаты в LinkedHashSet

не пойму почему не удаляются дубликаты при добавлении в Set,я читаю из файла, там есть некий код, который группируется в Листах

224
Какие коды ошибок возвращать в rest?

Какие коды ошибок возвращать в rest?

В задании написано вернуть коды ошибок типичные для restКакие именно? Какие коды являются типичными для rest?

199