Java FtpClient 實現(xiàn)文件上傳服務
一、Ubuntu 安裝 Vsftpd 服務
1、安裝
sudo apt-get install vsftpd
2、添加用戶(uftp)
sudo useradd -d /home/uftp -s /bin/bash uftp
3、設置用戶密碼
sudo useradd -d /home/uftp -s /bin/bash uftp
4、創(chuàng)建用戶目錄
sudo mkdir /home/uftp
5、設置用戶密碼
sudo passwd uftp
6、設置/etc/vsftpd.conf配置文件
sudo vim /etc/vsftpd.conf
a、修改上傳文件的權限:
這里會有一個問題,默認情況下的默認權限是 077 也就是對應Linux 中的700 計算規(guī)則是 linux 的權限 777 - local_umask
如果沒有設置local_umask 文件權限,會導致上傳之后的文件,我們無法通過服務器訪問(缺少權限)
b、在配置文件末尾添加:
userlist_deny=NO userlist_enable=YES userlist_file=/etc/allowed_users seccomp_sandbox=NO local_enable=YES
c、設置上傳文件權限:
write_enable = YES
這里如果不設置成YES 默認情況下不允許上傳文件。
7、創(chuàng)建/etc/allowed_users
添加允許任務加入到文件中,
8、重啟服務
sudo service vsftpd restart
9、使用XFTP 測試連接
使用XFtp 創(chuàng)建一個新的連接,這里需要注意選擇的協(xié)議ftp,端口是21,在填寫好賬號密碼之后,即可以連接我們的服務器。
測試上傳文件:
這里上傳了一個txt 文件,我們可以看到文件的權限是666,這里主要就是因為我們設置了上傳文件之后的權限 local_umask.
二、Java FtpClient 實現(xiàn)文件上傳
1、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>
2、創(chuàng)建FtpClient 對象遠程連接服務器
FTPClient ftp = new FTPClient(); //鏈接遠程服務 ftp.connect("192.168.148.128", 21);
連接結果可以debug 看到:
3、FtpClient 登錄服務器
ftp.login("uftp", "**"); //返回登錄結果狀態(tài) int reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return ; }
我們可以通過判斷replyCode 和replyString 來查看用戶是否登錄成功!
4、修改文件上傳路徑和文件類型
//修改上傳文件路徑 ftp.changeWorkingDirectory("/home/uftp/images/"); //修改文件類型 ftp.setFileType(FTP.BINARY_FILE_TYPE);
5、上傳文件
//獲取上傳文件的輸入流 FileInputStream fileInputStream = new FileInputStream(new File("D:/123.jpg")); //把文件推到服務器上 ftp.storeFile("hello.jpg", fileInputStream);
上傳文件完成之后,通過查看返回結果判斷時候上傳成功
6、退出登錄
//退出登錄 ftp.logout();
以上步驟就是使用FtpClient完成了一次文件上傳操作。
三、使用Nginx 查看服務器圖片
1、nginx 配置文件
在server 中添加 圖片地址解析
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt)${ root /home/uftp/images; expires 7d; }
2、重啟Nginx
./nginx -s reload
3、查看圖片
http://192.168.148.128/hello.jpg
總結:到這里我們就完成了一個簡單的圖片上傳到服務器,并且展示的小demo,配置過程中主要碰到的問題是關于文件權限的問題,如果沒有設置vsftpd 中的配置文件中l(wèi)ocal_umask,即使我們成功上傳了文件,也無法使用nginx 進行瀏覽,設置write_enable = YES 保證文件能夠上傳。
以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關文章
Spring Boot 將yyyy-MM-dd格式的文本字符串直接轉換為LocalDateTime出現(xiàn)的問題
這篇文章主要介紹了Spring Boot 將yyyy-MM-dd格式的文本字符串直接轉換為LocalDateTime出現(xiàn)的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09利用spring-data-redis實現(xiàn)incr自增的操作
這篇文章主要介紹了利用spring-data-redis實現(xiàn)incr自增的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11使用mybatis log plugin插件展示出數(shù)據(jù)庫查詢語句方式
本文介紹了如何安裝和配置MyBatis日志插件,包括集成log4j、配置log4j.xml文件和在application.properties中添加數(shù)據(jù)庫打印配置,通過這些步驟,可以在調試時查看預編譯的數(shù)據(jù)庫語句和實際查詢語句2024-11-11Spring?Security實現(xiàn)接口放通的方法詳解
在用Spring?Security項目開發(fā)中,有時候需要放通某一個接口時,我們需要在配置中把接口地址配置上,這樣做有時候顯得麻煩。本文將通過一個注解的方式快速實現(xiàn)接口放通,感興趣的可以了解一下2022-05-05