




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Java操作FTP實(shí)現(xiàn)上傳下載功能目錄FTP簡(jiǎn)介FTP架構(gòu)FTP數(shù)據(jù)連接模式用戶認(rèn)證客戶端Vsftp安裝與配置啟動(dòng)服務(wù)配置文件說(shuō)明傳輸模式配置系統(tǒng)用戶配置java操作ftp文件服務(wù)器1.引入依賴2.提供接口3.對(duì)提供操作ftp接口進(jìn)行實(shí)現(xiàn)4.配置ftp相關(guān)參數(shù)5.寫測(cè)試controller
FTP簡(jiǎn)介
文件傳輸協(xié)議(FileTransferProtocol,F(xiàn)TP)是用于在網(wǎng)絡(luò)上進(jìn)行文件傳輸?shù)囊惶讟?biāo)準(zhǔn)協(xié)議,它工作在OSI模型的第七層,TCP模型的第四層,即應(yīng)用層,使用TCP傳輸而不是UDP,客戶在和服務(wù)器建立連接前要經(jīng)過(guò)一個(gè)三次握手的過(guò)程,保證客戶與服務(wù)器之間的連接是可靠的,而且是面向連接,為數(shù)據(jù)傳輸提供可靠保證。
FTP也是一個(gè)應(yīng)用程序,基于不同的操作系統(tǒng)有不同的FTP應(yīng)用程序,而所有這些應(yīng)用程序都遵守同一種協(xié)議以傳輸文件??梢允褂肍TP進(jìn)行下載和上傳。
文件傳送協(xié)議FTP(FileTransferProtocol)是Internet上使用比較廣泛的文件傳送協(xié)議。FTP提供交互式的訪問(wèn),允許客戶指明文件的類型與格式,并允許文件具有存取權(quán)限。FTP屏蔽了各種計(jì)算機(jī)系統(tǒng)的細(xì)節(jié),因此適用于在異構(gòu)網(wǎng)絡(luò)中任意計(jì)算機(jī)之間傳送文件。它的基本應(yīng)用就是將文件從一臺(tái)計(jì)算機(jī)復(fù)制到另一臺(tái)計(jì)算機(jī)中。它要存取一個(gè)文件,就必須先獲得一個(gè)本地文件的副本,如果修改文件,也只能對(duì)文件的副本進(jìn)行修改,然后再將修改后的文件副本傳回到原節(jié)點(diǎn)。
您只要記住幾個(gè)關(guān)鍵詞:交互式、存取權(quán)限和副本。
簡(jiǎn)單文件傳送協(xié)議TFTP(TrivialFileTransferProtocol)是一個(gè)小而易于實(shí)現(xiàn)的文件傳送協(xié)議。TFTP是基于UDP數(shù)據(jù)報(bào),需要有自己的差錯(cuò)改正措施。TFTP只支持文件傳輸,不支持交互,沒(méi)有龐大的命令集。也沒(méi)有目錄列表功能,以及不能對(duì)用戶進(jìn)行身份鑒別。但它的代碼所占內(nèi)存較小,不需要硬盤就可以固化TFTP代碼,很適合較小的計(jì)算機(jī)和特殊用途的設(shè)備。
您會(huì)發(fā)現(xiàn)TFTP和FTP一個(gè)主要的區(qū)別就是它沒(méi)有交互式,且不進(jìn)行身份驗(yàn)證。
FTP的客戶可以是任意平臺(tái)
FTP標(biāo)準(zhǔn)端口:
20數(shù)據(jù)接口21指令接口
FTP架構(gòu)
FTP監(jiān)聽(tīng)于TCP的21號(hào)端口,是一種C/S架構(gòu)的應(yīng)用程序。在Linux中常用的服務(wù)端軟件和客戶端軟件一般如下表所示:
FTP數(shù)據(jù)連接模式
FTP有2種數(shù)據(jù)連接模式:命令連接和數(shù)據(jù)連接
命令連接:是指文件管理類命令,始終在線的持久性連接,直到用戶退出登錄為止(可以簡(jiǎn)單的理解為建立連接)數(shù)據(jù)連接:是指數(shù)據(jù)傳輸,按需創(chuàng)建及關(guān)閉的連接(可以簡(jiǎn)單的理解為傳輸數(shù)據(jù))
數(shù)據(jù)連接需要關(guān)注的點(diǎn)有:
1.數(shù)據(jù)傳輸格式
文件傳輸二進(jìn)制傳輸
2.數(shù)據(jù)傳輸模式
主動(dòng)模式:由服務(wù)器端創(chuàng)建數(shù)據(jù)連接被動(dòng)模式:由客戶端創(chuàng)建數(shù)據(jù)連接
兩種數(shù)據(jù)傳輸模式的建立過(guò)程:
1.主動(dòng)模式
命令連接(建立連接通道)
Client端以一個(gè)1024以上的隨機(jī)端口(端口號(hào)大于1023小于65535)來(lái)連接Server端的21號(hào)端口
數(shù)據(jù)連接(傳輸數(shù)據(jù))
Server端以20號(hào)端口去連接Client創(chuàng)建命令連接時(shí)使用的隨機(jī)端口+1的端口
示例:
命令連接:Client(9527)Server(21),數(shù)據(jù)連接:Server(20/tcp)--Client(9527+1)
2.被動(dòng)模式
命令連接
Client以一個(gè)1024以上的隨機(jī)端口號(hào)(端口號(hào)大于1023小于65535)來(lái)連接Server端的21號(hào)端口,命令連接建立完畢后,Server端會(huì)告知Client端用于創(chuàng)建數(shù)據(jù)連接的隨機(jī)端口號(hào)(端口號(hào)大于1023小于65535)
數(shù)據(jù)連接
Client以創(chuàng)建命令連接時(shí)使用的隨機(jī)端口號(hào)+1去連服務(wù)器端通過(guò)命令連接告知自己的一個(gè)隨機(jī)端口號(hào)來(lái)創(chuàng)建數(shù)據(jù)連接
示例:
命令連接:Client(9527)--Server(21),數(shù)據(jù)連接:Client(9527+1)--Server(隨機(jī)端口)
注意:
主動(dòng)模式存在弊端,因?yàn)榭蛻舳说亩丝谑请S機(jī)的,客戶端如果開(kāi)了防火墻,則服務(wù)器端去連客戶端創(chuàng)建數(shù)據(jù)連接時(shí)可能會(huì)被拒絕
用戶認(rèn)證
Ftp的用戶認(rèn)證主要有三種:
1.虛擬用戶:僅用于訪問(wèn)某特定服務(wù)中的資源
虛擬用戶通過(guò)ftp訪問(wèn)的資源位置為給虛擬用戶指定的映射成為的系統(tǒng)用戶的家目錄
2.系統(tǒng)用戶:可以登錄系統(tǒng)的真實(shí)用戶(出于對(duì)安全性的考慮,這種認(rèn)證很少使用)
系統(tǒng)用戶通過(guò)ftp訪問(wèn)的資源位置為用戶的家目錄
3.匿名用戶
匿名用戶(映射為ftp用戶)的共享資源位置是/var/ftp
服務(wù)端
/etc/pam.d/vsftpd#vsftpd用戶認(rèn)證配置文件/etc/vsftpd/#配置文件目錄/etc/vsftpd/vsftpd.conf#主配置文件vsftpd常見(jiàn)的配置參數(shù)
客戶端
lftp工具支持指定用戶名和密碼登錄
Vsftp安裝與配置
在linux環(huán)境下,使用最多的FTP服務(wù)端軟件就是Vsftpd!
安裝Vsftpd,運(yùn)行一下命令需要在root用戶下進(jìn)行!
yuminstallvsftpd安裝
yumremovevsftpd卸載
啟動(dòng)服務(wù)
啟動(dòng)服務(wù)servicevsftpdstart或者systemctlstartvsftpd.service
重啟服務(wù)systemctlrestartvsftpd.service
停止服務(wù)systemctlstopvsftpd.service
設(shè)置開(kāi)機(jī)自啟動(dòng)systemctlenablevsftpd.service
配置文件說(shuō)明
/etc/vsftpd/vsftpd.conf這個(gè)文件是vsftpd服務(wù)的核心配置文件!
我們?cè)谛薷呐渲梦募臅r(shí)候,最好先備份一份!
cp/etc/vsftpd/vsftpd.conf/etc/vsftpd/vsftpd.conf.bak
/etc/vsftpd/ftpusers這個(gè)文件是禁止使用vsftpd的用戶列表文件。記錄不允許訪問(wèn)FTP服務(wù)器的用戶名單,管理員可以把一些對(duì)系統(tǒng)安全有威脅的用戶賬號(hào)記錄在此文件中,以免用戶從FTP登錄后獲得大于上傳下載操作的權(quán)利,而對(duì)系統(tǒng)造成損壞。
/etc/vsftpd/user_list這個(gè)文件禁止或允許使用vsftpd的用戶列表文件。這個(gè)文件中指定的用戶缺省情況(即在/etc/vsftpd/vsftpd.conf中設(shè)置userlist_deny=YES)下也不能訪問(wèn)FTP服務(wù)器,在設(shè)置了userlist_deny=NO時(shí),僅允許user_list中指定的用戶訪問(wèn)FTP服務(wù)器。
注意配置文件中的值一定不要有空格
#Exampleconfigfile/etc/vsftpd/vsftpd.conf
#禁止匿名登錄
anonymous_enable=NO
#是否允許本地用戶(即linux系統(tǒng)中的用戶帳號(hào))登錄FTP服務(wù)器,默認(rèn)設(shè)置為YES允許
#本地用戶登錄后會(huì)進(jìn)入用戶主目錄,而匿名用戶登錄后進(jìn)入匿名用戶的下載目錄/var/ftp/pub
#若只允許匿名用戶訪問(wèn),前面加上#注釋掉即可阻止本地用戶訪問(wèn)FTP服務(wù)器
local_enable=YES
#是否允許本地用戶對(duì)FTP服務(wù)器文件具有寫權(quán)限,默認(rèn)設(shè)置為YES允許
write_enable=YES
#掩碼,本地用戶默認(rèn)掩碼為077
#你可以設(shè)置本地用戶的文件掩碼為缺省022,也可根據(jù)個(gè)人喜好將其設(shè)置為其他值
local_umask=022
#是否允許匿名用戶上傳文件,須將全局的write_enable=YES。默認(rèn)為YES
#anon_upload_enable=YES
#是否允許匿名用戶創(chuàng)建新文件夾
#anon_mkdir_write_enable=YES
#是否激活目錄歡迎信息功能
#當(dāng)用戶用CMD模式首次訪問(wèn)服務(wù)器上某個(gè)目錄時(shí),F(xiàn)TP服務(wù)器將顯示歡迎信息
#默認(rèn)情況下,歡迎信息是通過(guò)該目錄下的.message文件獲得的
#此文件保存自定義的歡迎信息,由用戶自己建立
dirmessage_enable=YES
#是否讓系統(tǒng)自動(dòng)維護(hù)上傳和下載的日志文件
#默認(rèn)情況該日志文件為/var/log/vsftpd.log,也可以通過(guò)下面的xferlog_file選項(xiàng)對(duì)其進(jìn)行設(shè)定
#默認(rèn)值為NO
xferlog_enable=YES
#是否設(shè)定FTP服務(wù)器將啟用FTP數(shù)據(jù)端口的連接請(qǐng)求
#ftp-data數(shù)據(jù)傳輸,21為連接控制端口
connect_from_port_20=YES
#設(shè)定是否允許改變上傳文件的屬主,與下面一個(gè)設(shè)定項(xiàng)配合使用
#注意,不推薦使用root用戶上傳文件
#chown_uploads=YES
#設(shè)置想要改變的上傳文件的屬主,如果需要,則輸入一個(gè)系統(tǒng)用戶名
#可以把上傳的文件都改成root屬主。whoever:任何人
#chown_username=whoever
#設(shè)定系統(tǒng)維護(hù)記錄FTP服務(wù)器上傳和下載情況的日志文件
#xferlog_file=/var/log/xferlog
#如果你想,你可以有一個(gè)標(biāo)準(zhǔn)的ftpdxferlog格式的日志文件。
#注意默認(rèn)的日志文件位置是/var/log/xferlog。
xferlog_std_format=YES
#您可以更改默認(rèn)值,以使空閑會(huì)話超時(shí)。
#idle_session_timeout=600
##您可以更改數(shù)據(jù)連接超時(shí)的默認(rèn)值。
#data_connection_timeout=120
#運(yùn)行vsftpd需要的非特權(quán)系統(tǒng)用戶,缺省是nobody
#nopriv_user=ftpsecure
#是否識(shí)別異步ABOR請(qǐng)求。
#如果FTPclient會(huì)下達(dá)“asyncABOR”這個(gè)指令時(shí),這個(gè)設(shè)定才需要啟用
#而一般此設(shè)定并不安全,所以通常將其取消
#async_abor_enable=YES
#是否以ASCII方式傳輸數(shù)據(jù)。默認(rèn)情況下,服務(wù)器會(huì)忽略ASCII方式的請(qǐng)求。
#啟用此選項(xiàng)將允許服務(wù)器以ASCII方式傳輸數(shù)據(jù)
#不過(guò),這樣可能會(huì)導(dǎo)致由"SIZE/big/file"方式引起的DoS攻擊
#ascii_upload_enable=YES
#ascii_download_enable=YES
#登錄FTP服務(wù)器時(shí)顯示的歡迎信息
#如有需要,可在更改目錄歡迎信息的目錄下創(chuàng)建名為.message的文件,并寫入歡迎信息保存后
#ftpd_banner=WelcometoblahFTPservice.
#黑名單設(shè)置。如果很討厭某些emailaddress,就可以使用此設(shè)定來(lái)取消他的登錄權(quán)限
#可以將某些特殊的emailaddress抵擋住。
#deny_email_enable=YES
#當(dāng)上面的deny_email_enable=YES時(shí),可以利用這個(gè)設(shè)定項(xiàng)來(lái)規(guī)定哪些郵件地址不可登錄vsftpd服務(wù)器
#此文件需用戶自己創(chuàng)建,一行一個(gè)emailaddress即可
#banned_email_file=/etc/vsftpd/banned_emails
#Youmayspecifyanexplicitlistoflocaluserstochroot()totheirhome
#directory.Ifchroot_local_userisYES,thenthislistbecomesalistof
#userstoNOTchroot().
#(Warning!chroot'ingcanbeverydangerous.Ifusingchroot,makesurethat
#theuserdoesnothavewriteaccesstothetopleveldirectorywithinthe
#chroot)
chroot_local_user=YES
#允許chroot用戶具備寫權(quán)限
allow_writeable_chroot=YES
#當(dāng)chroot_list_enable=YES,chroot_local_user=YES時(shí),在/etc/vsftpd.chroot_list文件中列出的用戶,可以切換到其他目錄;未在文件中列出的用戶,不能切換到其他目錄。
#當(dāng)chroot_list_enable=YES,chroot_local_user=NO時(shí),在/etc/vsftpd.chroot_list文件中列出的用戶,不能切換到其他目錄;未在文件中列出的用戶,可以切換到其他目錄。
#當(dāng)chroot_list_enable=NO,chroot_local_user=YES時(shí),所有的用戶均不能切換到其他目錄。
#當(dāng)chroot_list_enable=NO,chroot_local_user=NO時(shí),所有的用戶均可以切換到其他目錄。
chroot_list_enable=YES
#被列入此文件的用戶,在登錄后將不能切換到自己目錄以外的其他目錄
#從而有利于FTP服務(wù)器的安全管理和隱私保護(hù)。此文件需自己建立
#chroot_list_file=/etc/vsftpd/chroot_list
#是否允許遞歸查詢。默認(rèn)為關(guān)閉,以防止遠(yuǎn)程用戶造成過(guò)量的I/O
#ls_recurse_enable=YES
#是否允許監(jiān)聽(tīng)。
#如果設(shè)置為YES,則vsftpd將以獨(dú)立模式運(yùn)行,由vsftpd自己監(jiān)聽(tīng)和處理IPv4端口的連接請(qǐng)求
listen=YES
#設(shè)定是否支持IPV6。如要同時(shí)監(jiān)聽(tīng)I(yíng)Pv4和IPv6端口,
#則必須運(yùn)行兩套vsftpd,采用兩套配置文件
#同時(shí)確保其中有一個(gè)監(jiān)聽(tīng)選項(xiàng)是被注釋掉的
#listen_ipv6=NO
#設(shè)置是否阻扯user_list文件中的用戶登錄FTP服務(wù)器,默認(rèn)為YES
#userlist_deny=YES/NO
#設(shè)置PAM外掛模塊提供的認(rèn)證服務(wù)所使用的配置文件名,即/etc/pam.d/vsftpd文件
#此文件中file=/etc/vsftpd/ftpusers字段,說(shuō)明了PAM模塊能抵擋的帳號(hào)內(nèi)容來(lái)自文件/etc/vsftpd/ftpusers中
pam_service_name=vsftpd
#是否允許ftpusers文件中的用戶登錄FTP服務(wù)器,默認(rèn)為NO
#若此項(xiàng)設(shè)為YES,則user_list文件中的用戶允許登錄FTP服務(wù)器
#而如果同時(shí)設(shè)置了userlist_deny=YES,則user_list文件中的用戶將不允許登錄FTP服務(wù)器,甚至連輸入密碼提示信息都沒(méi)有
userlist_enable=YES
#是否使用tcp_wrappers作為主機(jī)訪問(wèn)控制方式。
#tcp_wrappers可以實(shí)現(xiàn)linux系統(tǒng)中網(wǎng)絡(luò)服務(wù)的基于主機(jī)地址的訪問(wèn)控制
#在/etc目錄中的hosts.allow和hosts.deny兩個(gè)文件用于設(shè)置tcp_wrappers的訪問(wèn)控制
#前者設(shè)置允許訪問(wèn)記錄,后者設(shè)置拒絕訪問(wèn)記錄。
#如想限制某些主機(jī)對(duì)FTP服務(wù)器的匿名訪問(wèn),編緝/etc/hosts.allow文件,如在下面增加兩行命令:
#vsftpd::DENY和vsftpd::DENY
#表明限制IP為/主機(jī)訪問(wèn)IP為的FTP服務(wù)器
#此時(shí)FTP服務(wù)器雖可以PING通,但無(wú)法連接
tcp_wrappers=YES
#開(kāi)啟被動(dòng)模式
pasv_enable=YES
#傳輸文件的端口范圍,如果是云服務(wù)器記得開(kāi)放端口,linux服務(wù)器本身也要開(kāi)放端口
pasv_min_port=9000
pasv_max_port=9005
傳輸模式配置
開(kāi)啟被動(dòng)模式:
connect_from_port_20=NO(默認(rèn)為YES)#設(shè)置是否允許主動(dòng)模式
pasv_enable=YES(默認(rèn)為YES)#設(shè)置是否允許被動(dòng)模式
pasv_min_port=50000(default:0(useanyport))
pasv_max_port=60000(default:0(useanyport))
開(kāi)啟主動(dòng)模式:
connect_from_port_20=YES
pasv_enable=NO
系統(tǒng)用戶配置
linux創(chuàng)建用戶:
useradd-d/home/ftp/compass-s/sbin/nologincompass
passwdcompass
為虛擬用戶創(chuàng)建家目錄
mkdir-p/home/ftp/compass
設(shè)置權(quán)限
chown-Rcompass:compass/home/ftp/compass
配置selinux允許ftp訪問(wèn)home和外網(wǎng)訪問(wèn)
[root@master~]#setsebool-Pallow_ftpd_full_accesson
[root@master~]#setsebool-Ptftp_home_diron
重啟vsftpd服務(wù)
[root@master~]#systemctlrestartvsftpd
無(wú)法登錄的情況在/etc/vsftpd/vsftpd.conf配置文件中添加了以下兩句
chroot_local_user=YES#原本就有,取掉注釋就好
allow_writeable_chroot=YES#添加
chowncompass:compass-R/home/ftp/compass
java操作ftp文件服務(wù)器
有時(shí)候,我們需要接收用戶上傳的文件存儲(chǔ)到服務(wù)器,然后保存起來(lái),下次用戶可以直接下載,或者是保存為檔案,我這里提供三個(gè)方法,一個(gè)是上傳文件到ftp,還有就是從ftp下載文件,還有就是刪除ftp服務(wù)器刪的文件
1.引入依賴
!--ftp上傳下載--
dependency
groupIdcommons-net/groupId
artifactIdcommons-net/artifactId
version3.7/version
/dependency
2.提供接口
importjavax.servlet.http.HttpServletResponse;
importjava.io.InputStream;
importjava.io.OutputStream;
*ftp文件服務(wù)器操作接口
*@authorcompass
*@date2025/10/1915:00
*@since1.0.0
publicinterfaceFtpService{
*上傳文件到ftp
*@paraminputStream輸入流
*@paramfileName新的文件名,包含拓展名
*@paramfilePath保存路徑
*@return
*@authorcompass
BooleanuploadFile(InputStreaminputStream,StringfileName,StringfilePath);
*下載ftp文件,直接轉(zhuǎn)到輸出流
*@authorcompass
*@paramftpFilePath
*@authorcompass
byte[]downloadFileBytes(StringftpFilePath,HttpServletResponseresponse);
*刪除ftp文件
*@authorcompass
*@paramftpFilePathftp下文件路徑,根目錄開(kāi)始
*@return
BooleandeleteFile(StringftpFilePath);
}
3.對(duì)提供操作ftp接口進(jìn)行實(shí)現(xiàn)
*@authorcompass
*@date2025-10-19
*@since1.0
importjava.io.*;
importmon.AjaxResult;
import.entity.FtpInstanceEntity;
import.service.FtpService;
import.utils.ResponseUtil;
importlombok.extern.slf4j.Slf4j;
importmons.lang3.StringUtils;
import.ftp.FTP;
import.ftp.FTPClient;
import.ftp.FTPReply;
importorg.springframework.stereotype.Service;
importjavax.annotation.Resource;
importjavax.servlet.http.HttpServletResponse;
@Slf4j
@Service
publicclassFtpServiceImplimplementsFtpService{
@Resource
FtpInstanceEntityftpInstanceEntity;
*上傳文件到ftp
*@paraminputStream輸入流
*@paramfileName新的文件名,包含拓展名
*@paramfilePath保存路徑
*@return
*@authorcompass
@Override
publicBooleanuploadFile(InputStreaminputStream,StringfileName,StringfilePath){
//定義保存結(jié)果
booleanisSuccess=false;
//初始化連接
FTPClientftp=connectFtpServer();
if(ftp!=null){
try{
//設(shè)置文件傳輸模式為二進(jìn)制,可以保證傳輸?shù)膬?nèi)容不會(huì)被改變
ftp.setFileType(FTP.BINARY_FILE_TYPE);
//注:上傳文件都為0字節(jié),設(shè)置為被動(dòng)模式即可
ftp.enterLocalPassiveMode();
//跳轉(zhuǎn)到指定路徑,逐級(jí)跳轉(zhuǎn),不存在的話就創(chuàng)建再進(jìn)入
toPathOrCreateDir(ftp,filePath);
//上傳文件參數(shù):上傳后的文件名,輸入流,,返回Boolean類型,上傳成功返回true
isSuccess=ftp.storeFile(fileName,inputStream);
//關(guān)閉輸入流
inputStream.close();
//退出ftp
ftp.logout();
}catch(IOExceptione){
log.error(e.toString());
}finally{
if(ftp.isConnected()){
try{
//斷開(kāi)ftp的連接
ftp.disconnect();
}catch(IOExceptionioe){
log.error(ioe.toString());
returnisSuccess;
*下載ftp文件,直接轉(zhuǎn)到輸出流
*@paramftpFilePath
*@authorcompass
@Override
publicbyte[]downloadFileBytes(StringftpFilePath,HttpServletResponseresponse){
FTPClientftp=connectFtpServer();
try{
ByteArrayOutputStreamstream=newByteArrayOutputStream();
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();
booleanretrieveFile=ftp.retrieveFile(ftpFilePath,stream);
if(!retrieveFile){
thrownewRuntimeException("FTP文件下載失敗");
ftp.logout();
returnstream.toByteArray();
}catch(Exceptione){
log.error("FTP文件下載失敗!"+e.toString());
ResponseUtil.response(response,AjaxResult.businessError(e.getMessage(),"-1"));
thrownewRuntimeException(e.getMessage());
}finally{
if(ftp.isConnected()){
try{
ftp.disconnect();
}catch(IOExceptionioe){
log.error(ioe.toString());
*刪除ftp文件
*@paramftpFilePath文件路徑
*@returnjava.lang.Boolean
*@authorcompass
*@date2025/10/1918:35
*@since1.0.0
@Override
publicBooleandeleteFile(StringftpFilePath){
FTPClientftp=connectFtpServer();
booleanresult=false;
try{
result=ftp.deleteFile(ftpFilePath);
ftp.logout();
returnresult;
}catch(Exceptione){
log.error("FTP文件刪除失??!"+e.toString());
}finally{
if(ftp.isConnected()){
try{
ftp.disconnect();
}catch(IOExceptionioe){
log.error(ioe.toString());
returnresult;
*創(chuàng)建FTPClient對(duì)象
*@return.ftp.FTPClient
*@authorcompass
*@date2025/10/1918:35
*@since1.0.0
privateFTPClientconnectFtpServer(){
//創(chuàng)建FTPClient對(duì)象(對(duì)于連接ftp服務(wù)器,以及上傳和上傳都必須要用到一個(gè)對(duì)象)
FTPClientftpClient=newFTPClient();
//設(shè)置連接超時(shí)時(shí)間
ftpClient.setConnectTimeout(1000*10);
//設(shè)置ftp字符集
ftpClient.setControlEncoding("utf-8");
//設(shè)置被動(dòng)模式,文件傳輸端口設(shè)置,否則文件上傳不成功,也不報(bào)錯(cuò)
ftpClient.enterLocalPassiveMode();
try{
//定義返回的狀態(tài)碼
intreplyCode;
//連接ftp(當(dāng)前項(xiàng)目所部署的服務(wù)器和ftp服務(wù)器之間可以相互通訊,表示連接成功)
ftpClient.connect(ftpInstanceEntity.getHost());
//輸入賬號(hào)和密碼進(jìn)行登錄
ftpClient.login(ftpInstanceEntity.getUsername(),ftpInstanceEntity.getPassword());
//接受狀態(tài)碼(如果成功,返回230,如果失敗返回503)
replyCode=ftpClient.getReplyCode();
//根據(jù)狀態(tài)碼檢測(cè)ftp的連接,調(diào)用isPositiveCompletion(reply)--如果連接成功返回true,否則返回false
if(!FTPReply.isPositiveCompletion(replyCode)){
("connectftp{}failed",ftpInstanceEntity.getHost());
//說(shuō)明連接失敗,需要斷開(kāi)連接
ftpClient.disconnect();
thrownewRuntimeException(String.format("connectftp%sfailed",ftpInstanceEntity.getHost()));
("連接狀態(tài)碼:"+replyCode);
}catch(IOExceptione){
log.error("connectfail:"+e.toString());
thrownewRuntimeException(String.format("connectftp%serror",ftpInstanceEntity.getHost()));
returnftpClient;
*跳轉(zhuǎn)到指定路徑不存在就創(chuàng)建
*@paramftp操作ftp對(duì)象
*@paramfilePath文件路徑
*@returnvoid
*@authorcompass
*@date2025/10/1915:05
*@since1.0.0
privatevoidtoPathOrCreateDir(FTPClientftp,StringfilePath)throwsIOException{
String[]dirs=filePath.split("/");
for(Stringdir:dirs){
if(StringUtils.isEmpty(dir)){
continue;
if(!ftp.changeWorkingDirectory(dir)){
ftp.makeDirectory(dir);
ftp.changeWorkingDirectory(dir);
4.配置ftp相關(guān)參數(shù)
在配置文件中配置連接ftp服務(wù)器的配置
ftp:
#ftp服務(wù)器的地址
host:
#ftp服務(wù)器的端口號(hào)(連接端口號(hào))
port:21
#ftp的用戶名
username:compass
#ftp的密碼
password:6317738ef8324199a24602308f3a9a18
#ftp上傳的根目錄
basePath:/home/ftp/compass
#回顯地
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- JG/T 5109-1999導(dǎo)桿式柴油打樁錘
- JG/T 5061.4-1995固定活塞薄壁取土器
- JG/T 3028-1995住宅廚房排煙道
- JG/T 287-2013保溫裝飾板外墻外保溫系統(tǒng)材料
- JG/T 186-2006玻璃纖維增強(qiáng)塑料(玻璃鋼)窗
- JG/T 160-2017混凝土用機(jī)械錨栓
- DZ/T 0172-1997垂直地震剖面法勘探技術(shù)標(biāo)準(zhǔn)
- DZ/T 0101.6-1994地質(zhì)儀器儀表制造時(shí)間定額鉆床
- DZ/T 0071-1993地面高精度磁測(cè)技術(shù)規(guī)程
- DZ 54-1987GJX-1型袖珍經(jīng)緯儀
- 2025入團(tuán)積極分子發(fā)展對(duì)象考試題庫(kù)及答案詳解(必刷)
- 2025河南省農(nóng)業(yè)信貸擔(dān)保有限責(zé)任公司招聘32人筆試參考題庫(kù)附帶答案詳解
- 2025 年發(fā)展對(duì)象培訓(xùn)考試題及答案
- 《高效吸引目標(biāo)客戶》課件
- 江蘇鎮(zhèn)江歷年中考作文題與審題指導(dǎo)(2003-2020)
- 二零二五版塔吊司機(jī)承包合同書(shū)協(xié)議書(shū)
- 2025年中國(guó)電動(dòng)垂直起降飛行器行業(yè)市場(chǎng)前景預(yù)測(cè)及投資價(jià)值評(píng)估分析報(bào)告
- 產(chǎn)品臨床推廣合同協(xié)議書(shū)范本模板5篇
- 玻璃行業(yè)合作合同協(xié)議
- AI驅(qū)動(dòng)敦煌石窟壁畫(huà)色彩提取及服裝設(shè)計(jì)創(chuàng)新研究
- 2025年水利安全員C證考前通關(guān)必練題庫(kù)-含答案
評(píng)論
0/150
提交評(píng)論