1. 程式人生 > >Java實現FTP上傳檔案到Linux伺服器的那些坑

Java實現FTP上傳檔案到Linux伺服器的那些坑

一、Linux安裝FTP服務

        首先Linux伺服器需要安裝FTP服務,步驟如下:

1、執行如下ftp服務安裝命令:

yum install vsftpd

可能會出現如下錯誤:

"Couldn't open file /mnt/repodata/repomd.xml"

執行如下掛載命令後重新安裝即可:

mount   /dev/cdrom   /mnt 

 

2、啟動ftp服務

命令:

開啟:# service vsftpd start
關閉:# service vsftpd stop

 

3、ftp預設使用者

        ftp預設的使用者為test,ftp目錄為/home/test。在Linux中建立新使用者,如下:

# useradd -d /home/test test //增加使用者test,並制定test使用者的主目錄為/home/test
# passwd test //為test設定密碼
# userdel test    //刪除test使用者 

 

二、Java實現檔案上傳

        ftp依賴的jar包的pom.xml檔案如下:

<dependency>
    <!-- ftp -->
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
	<version>3.6</version>
</dependency>

 具體程式碼:

package com.leboop.util;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

import java.io.*;
import java.util.Date;

/**
 * Created by leboop on 2018/8/28.
 */
public class FtpUtil {
    //伺服器ip地址
    private static String url = "192.168.189.111";
    //FTP埠,預設是21(注意:SSH預設22)
    private static int port = 21;
    //登入使用者名稱
    private static String username = "test";
    //登入密碼
    private static String password = "11111111";

    /將字串寫入檔案上傳至伺服器
    public static boolean upload() {
        //寫入檔案的字串
        String cityStr = "Hello World";

        boolean success = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;

            ftp.setControlEncoding("UTF-8");
            //連線FTP伺服器
            ftp.connect(url, port);
            //如果採用預設埠,可以使用ftp.connect(url)的方式直接連線FTP伺服器
            ftp.login(username, password);
            //如果reply的值是230,表示連線成功,530可能是使用者名稱或者密碼錯誤
            //500可能是/home/test目錄不存在
            reply = ftp.getReplyCode();
            System.out.println(reply);

            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return success;
            }
            long date = new Date().getTime();
            String filename = date + "ftp.csv";
            byte[] cBytes= cityStr.getBytes();
            //字串轉換為位元組陣列
            InputStream input = new ByteArrayInputStream(cBytes);
            
            ftp.enterLocalPassiveMode();
            //需要新增這行程式碼,不然上傳的檔案為空
            ftp.setFileType(FTP.BINARY_FILE_TYPE);

            boolean g = ftp.storeFile(filename, input);

            System.out.println("上傳伺服器:" + g);
            input.close();
            ftp.logout();
            success = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return success;
    }

}