一、Ubuntu 安裝 Vsftpd 服務(wù)
1、安裝
sudo apt-get install vsftpd
2、添加用戶(uftp)
sudo useradd -d /home/uftp -s /bin/bash uftp
3、設(shè)置用戶密碼
sudo useradd -d /home/uftp -s /bin/bash uftp
4、創(chuàng)建用戶目錄
sudo mkdir /home/uftp
5、設(shè)置用戶密碼
sudo passwd uftp
6、設(shè)置/etc/vsftpd.conf配置文件
sudo vim /etc/vsftpd.conf
a、修改上傳文件的權(quán)限:
這里會(huì)有一個(gè)問題,默認(rèn)情況下的默認(rèn)權(quán)限是 077 也就是對(duì)應(yīng)Linux 中的700 計(jì)算規(guī)則是 linux 的權(quán)限 777 - local_umask
如果沒有設(shè)置local_umask 文件權(quán)限,會(huì)導(dǎo)致上傳之后的文件,我們無(wú)法通過服務(wù)器訪問(缺少權(quán)限)
b、在配置文件末尾添加:
1
2
3
4
5
|
userlist_deny=NO userlist_enable=YES userlist_file=/etc/allowed_users seccomp_sandbox=NO local_enable=YES |
c、設(shè)置上傳文件權(quán)限:
write_enable = YES
這里如果不設(shè)置成YES 默認(rèn)情況下不允許上傳文件。
7、創(chuàng)建/etc/allowed_users
添加允許任務(wù)加入到文件中,
8、重啟服務(wù)
sudo service vsftpd restart
9、使用XFTP 測(cè)試連接
使用XFtp 創(chuàng)建一個(gè)新的連接,這里需要注意選擇的協(xié)議ftp,端口是21,在填寫好賬號(hào)密碼之后,即可以連接我們的服務(wù)器。
測(cè)試上傳文件:
這里上傳了一個(gè)txt 文件,我們可以看到文件的權(quán)限是666,這里主要就是因?yàn)槲覀冊(cè)O(shè)置了上傳文件之后的權(quán)限 local_umask.
二、Java FtpClient 實(shí)現(xiàn)文件上傳
1、Maven 依賴
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<!-- 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 對(duì)象遠(yuǎn)程連接服務(wù)器
1
2
3
|
FTPClient ftp = new FTPClient(); //鏈接遠(yuǎn)程服務(wù) ftp.connect("192.168.148.128", 21); |
連接結(jié)果可以debug 看到:
3、FtpClient 登錄服務(wù)器
1
2
3
4
5
6
7
|
ftp.login("uftp", "**"); //返回登錄結(jié)果狀態(tài) int reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return ; } |
我們可以通過判斷replyCode 和replyString 來(lái)查看用戶是否登錄成功!
4、修改文件上傳路徑和文件類型
1
2
3
4
|
//修改上傳文件路徑 ftp.changeWorkingDirectory("/home/uftp/images/"); //修改文件類型 ftp.setFileType(FTP.BINARY_FILE_TYPE); |
5、上傳文件
1
2
3
4
|
//獲取上傳文件的輸入流 FileInputStream fileInputStream = new FileInputStream(new File("D:/123.jpg")); //把文件推到服務(wù)器上 ftp.storeFile("hello.jpg", fileInputStream); |
上傳文件完成之后,通過查看返回結(jié)果判斷時(shí)候上傳成功
6、退出登錄
1
2
|
//退出登錄 ftp.logout(); |
以上步驟就是使用FtpClient完成了一次文件上傳操作。
三、使用Nginx 查看服務(wù)器圖片
1、nginx 配置文件
在server 中添加 圖片地址解析
1
2
3
4
|
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
總結(jié):到這里我們就完成了一個(gè)簡(jiǎn)單的圖片上傳到服務(wù)器,并且展示的小demo,配置過程中主要碰到的問題是關(guān)于文件權(quán)限的問題,如果沒有設(shè)置vsftpd 中的配置文件中l(wèi)ocal_umask,即使我們成功上傳了文件,也無(wú)法使用nginx 進(jìn)行瀏覽,設(shè)置write_enable = YES 保證文件能夠上傳。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持服務(wù)器之家!
原文鏈接:http://www.cnblogs.com/jaycekon/p/6221925.html