Java FtpClient 實現文件上傳服務

1、Ubuntu 安裝 Vsftpd 服務

   一、安裝    linux

sudo apt-get install vsftpd

   二、添加用戶(uftp)nginx

sudo useradd -d /home/uftp -s /bin/bash uftp

   三、設置用戶密碼apache

sudo useradd -d /home/uftp -s /bin/bash uftp

   四、建立用戶目錄vim

sudo mkdir /home/uftp

   五、設置用戶密碼bash

sudo passwd uftp

  

   六、設置/etc/vsftpd.conf配置文件服務器

sudo vim /etc/vsftpd.conf

    a、修改上傳文件的權限工具

      

      這裏會有一個問題,默認狀況下的默認權限是 077 也就是對應Linux 中的700 計算規則是 linux 的權限 777 - local_umask測試

      若是沒有設置local_umask 文件權限,會致使上傳以後的文件,咱們沒法經過服務器訪問(缺乏權限) spa

    b、在配置文件末尾添加:debug

userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/allowed_users
seccomp_sandbox=NO
local_enable=YES

    c、設置上傳文件權限:

write_enable = YES

    這裏若是不設置成YES 默認狀況下不容許上傳文件。

   七、建立/etc/allowed_users

    添加容許任務加入到文件中,

    八、重啓服務

sudo service vsftpd restart

    

   九、使用XFTP 測試鏈接

    使用XFtp 建立一個新的鏈接,這裏須要注意選擇的協議ftp,端口是21,在填寫好帳號密碼以後,便可以鏈接咱們的服務器。

    

  測試上傳文件:

    這裏上傳了一個txt 文件,咱們能夠看到文件的權限是666,這裏主要就是由於咱們設置了上傳文件以後的權限 local_umask.

 

2、Java FtpClient 實現文件上傳

    一、Maven 依賴

<!-- Apache工具組件 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
        </dependency>

  

    二、建立FtpClient 對象遠程鏈接服務器

            FTPClient ftp = new FTPClient();
            //連接遠程服務
            ftp.connect("192.168.148.128", 21);

      鏈接結果能夠debug 看到:

    

 

    三、FtpClient  登陸服務器

            ftp.login("uftp", "**");
            //返回登陸結果狀態
            int reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return ;
            }

    咱們能夠經過判斷replyCode 和replyString 來查看用戶是否登陸成功!

    

 

    四、修改文件上傳路徑和文件類型

            //修改上傳文件路徑
            ftp.changeWorkingDirectory("/home/uftp/images/");
            //修改文件類型
            ftp.setFileType(FTP.BINARY_FILE_TYPE);    

 

     五、上傳文件

            //獲取上傳文件的輸入流
            FileInputStream fileInputStream = new FileInputStream(new File("D:/123.jpg"));
            //把文件推到服務器上
            ftp.storeFile("hello.jpg", fileInputStream);

      上傳文件完成以後,經過查看返回結果判斷時候上傳成功

    

 

    六、退出登陸

            //退出登陸
            ftp.logout();

 

 

     以上步驟就是使用FtpClient完成了一次文件上傳操做。

  

 3、使用Nginx 查看服務器圖片

    一、nginx 配置文件

      在server 中添加 圖片地址解析

location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt)${
     root /home/uftp/images;
     expires 7d;  
}   

 

   

     二、重啓Nginx

./nginx -s reload

    

    三、查看圖片

http://192.168.148.128/hello.jpg

    

 

   總結:到這裏咱們就完成了一個簡單的圖片上傳到服務器,而且展現的小demo,配置過程當中主要碰到的問題是關於文件權限的問題,若是沒有設置vsftpd 中的配置文件中local_umask,即便咱們成功上傳了文件,也沒法使用nginx 進行瀏覽,設置write_enable = YES 保證文件可以上傳。

相關文章
相關標籤/搜索