當前位置:首頁 » 文件管理 » ftp伺服器源代碼

ftp伺服器源代碼

發布時間: 2022-11-25 08:24:04

❶ 如何用ftp下載已上傳的網站的源代碼進行修改

首先你需要知道如下參數:對方的 FTP 伺服器的 IP 地址、用戶名、登錄密碼、對外公用的子目錄和對該目錄的讀寫許可權、以及對外服務的 FTP 埠號(不一定都是標準的埠號)。然後你用 cuteftp、leapftp 等客戶端軟體,在其中設置好以上參數,就可以下載網站的源代碼了。(現在的 FTP 客戶端都支持文件和子目錄的遞歸下載)

❷ 網站後台、ftp遠程連接、源代碼分別是什麼

網站後台指的是你網站前端的管理後台,也可以叫管理系統,FTP遠程連接是指用本地電腦通過FTP的軟體連接上遠程的伺服器或者虛擬主機,說明:一般伺服器
用遠程桌面連接但是FTP連接也可以,源代碼就是指網站後台以及網站前端的源文件,也可以叫網站內容就是網站源代碼,希望可以幫到你

❸ 網站的源代碼里怎麼找到在ftp里顯示的代碼文件夾

摘要 如果你知道代碼是多少可以按crtl+f進行搜索,然後就能知道代碼在那個文件夾和具體位置

❹ 解釋vsftpd源代碼

vsftpd配置文件採用「#」作為注釋符,以「#」開頭的行和空白行在解析時將被忽略,其餘的行被視為配置命令行,每個配置命令的「=」兩邊不要留有空格。對於每個配置命令,在配置文件中還列出了相關的配置說明,利用vi編輯器可實現對配置文件的編輯修改。方法如下:
#vi /etc/vsftpd/vsftpd.conf

1.登錄和對匿名用戶的設置
write_enable=YES //是否對登錄用戶開啟寫許可權。屬全局性設置。默認NO
local_enable=YES //是否允許本地用戶登錄FTP伺服器。默認為NO
anonymous_enable=YES //設置是否允許匿名用戶登錄FTP伺服器。默認為YES
ftp_username=ftp //定義匿名用戶的賬戶名稱,默認值為ftp。
no_anon_password=YES //匿名用戶登錄時是否詢問口令。設置為YES,則不詢問。默
認NO
anon_world_readable_only=YES //匿名用戶是否允許下載可閱讀的文檔,默認為YES。
anon_upload_enable=YES //是否允許匿名用戶上傳文件。只有在write_enable設置為
YES時,該配置項才有效。而且匿名用戶對相應的目錄必須有寫許可權。默認為NO。
anon_mkdir_write_enable=YES //是否允許匿名用戶創建目錄。只有在write_enable設置為 YES時有效。且匿名用戶對上層目錄有寫入的許可權。默認為NO。
anon_other_write_enable=NO //若設置為YES,則匿名用戶會被允許擁有多於
上傳和建立目錄的許可權,還會擁有刪除和更名許可權。默認值為NO。

2.設置歡迎信息
用戶登錄FTP伺服器成功後,伺服器可向登錄用戶輸出預設置的歡迎信息。
ftpd_banner=Welcome to my FTP server.
//該配置項用於設置比較簡短的歡迎信息。若歡迎信息較多,則可使用banner_file配置項。
banner_file=/etc/vsftpd/banner
//設置用戶登錄時,將要顯示輸出的文件。該設置項將覆蓋ftpd_banner的設置。
dirmessage_enable=YES
//設置是否顯示目錄消息。若設置為YES,則當用戶進入特定目錄(比如/var/ftp/linux)時,將顯示該目錄中的由message_file配置項指定的文件(.message)中的內容。
message_file=.message //設置目錄消息文件。可將顯示信息存入該文件。該文件需要放在 相應的目錄(比如/var/ftp/linux)下

3.設置用戶登錄後所在的目錄
local_root=/var/ftp
// 設置本地用戶登錄後所在的目錄。默認配置文件中沒有設置該項,此時用戶登錄FTP伺服器後,所在的目錄為該用戶的主目錄,對於root用戶,則為/root目錄。
anon_root=/var/ftp
//設置匿名用戶登錄後所在的目錄。若未指定,則默認為/var/ftp目錄。

4.控制用戶是否允許切換到上級目錄
在默認配置下,用戶可以使用「cd..」命名切換到上級目錄。比如,若用戶登錄後所在的目錄為/var/ftp,則在「ftp>」命令行下,執行「cd..」命令後,用戶將切換到其上級目錄/var,若繼續執行該命令,則可進入Linux系統的根目錄,從而可以對整個Linux的文件系統進行操作。

若設置了write_enable=YES,則用戶還可對根目錄下的文件進行改寫操作,會給系統帶來極大的安全隱患,因此,必須防止用戶切換到Linux的根目錄,相關的配置項如下:
chroot_list_enable=YES
// 設置是否啟用chroot_list_file配置項指定的用戶列表文件。設置為YES則除了列在j/etc/vsftpd/chroot_list文件中的的帳號外,所有登錄的用戶都可以進入ftp根目錄之外的目錄。默認NO
chroot_list_file=/etc/vsftpd/chroot_list
// 用於指定用戶列表文件,該文件用於控制哪些用戶可以切換到FTP站點根目錄的上級目錄。
chroot_local_user=YES
// 用於指定用戶列表文件中的用戶,是否允許切換到上級目錄。默認NO
注意:要對本地用戶查看效果,需先設置local_root=/var/ftp

具體情況有以下幾種:
1)當chroot_list_enable=YES,chroot_local_user=YES時,在/etc/vsftpd/chroot_list文件中列出的用戶,可以切換到上級目錄;未在文件中列出的用戶,不能切換到站點根目錄的上級目錄。
2)當chroot_list_enable=YES,chroot_local_user=NO時,在/etc/vsftpd/chroot_list文件中列出的用戶,不能切換到站點根目錄的上級目錄;未在文件中列出的用戶,可以切換到上級目錄。
3)當chroot_list_enable=NO,chroot_local_user=YES時,所有用戶均不能切換到上級目錄。
4)當chroot_list_enable=NO,chroot_local_user=NO時,所有用戶均可以切換到上級目錄。
5)當用戶不允許切換到上級目錄時,登錄後FTP站點的根目錄「/」是該FTP賬戶的主目錄,即文件的系統的/var/ftp目錄。

5.設置訪問控制
(1)設置允許或不允許訪問的主機(見TBP14)
tcp_wrappers=YES用來設置vsftpd伺服器是否與tcp wrapper相結合,進行主機的訪問控制。默認設置為YES,vsftpd伺服器會檢查/etc/hosts.allow和/etc/hosts.deny中的設置,以決定請求連接的主機是否允許訪問該FTP伺服器。這兩個文件可以起到簡易的防火牆功能。
比如,若要僅允許192.168.168.1~192.168.168.254的用戶,可以訪問連接vsftpd伺服器,則可在/etc/hosts.allow文件中添加以下內容:
vsftpd:192.168.168.0/255.255.255.0 :allow
all:all:deny

(2)設置允許或不允許訪問的用戶
對用戶的訪問控制由/etc/vsftpd/user_list和/etc/vsftpd/ftpusers文件來控制實現。相關配置命令如下:
userlist_enable=YES
// 決定/etc/vsftpd/user_list文件是否啟用生效。YES則生效,NO不生效。
userlist_deny=YES
// 決定/etc/vsftpd/user_list文件中的用戶是允許訪問還是不允許訪問。若設置為YES,則/etc/vsftpd/user_list文件中的用戶將不允許訪問FTP伺服器;若設置為NO,則只有vsftpd.user_list文件中的用戶,才能訪問FTP伺服器。

6.設置訪問速度
anon_max_rate=0
//設置匿名用戶所能使用的最大傳輸速度,單位為b/s。若設置為0,則不受速度限制,此為默認值。
local_max_rate=0
// 設置本地用戶所能使用的最大傳輸速度。默認為0,不受限制。

7.定義用戶配置文件
在vsftpd伺服器中,不同用戶還可使用不同的配置,這要通過用戶配置文件來實現。
user_config_dir=/etc/vsftpd/userconf //用於設置用戶配置文件所在的目錄。
設置了該配置項後,當用戶登錄FTP伺服器時,系統就會到/etc/vsftpd/userconf目錄下讀取與當前用戶名相同的文件,並根據文件中的配置命令,對當前用戶進行更進一步的配置。比如,利用用戶配置文件,可實現對不同用戶進行訪問的速度進行控制,在各用戶配置文件中,定義local_max_rate配置,以決定該用戶允許的訪問速度。

8.與連接相關的設置
listen=YES
//設置vsftpd伺服器是否以standalone模式運行。以standalone模式運行是一種較好的方式,此時listen必須設置為YES,此為默認值,建議不要更改。很多與伺服器運行相關的配置命令,需要此運行模式才有效。若設置為NO,則vsftpd不是以獨立的服務運行,要受xinetd服務的管理控制,功能上會受限制。

max_clients=0
//設置vsftpd允許的最大連接數,默認為0,表示不受限制。若設置為150時,則同時允許有150個連接,超出的將拒絕建立連接。只有在以standalone模式運行時才有效。

max_per_ip=0
// 設置每個IP地址允許與FTP伺服器同時建立連接的數目。默認為0,不受限制。通常可對此配置進行設置,防止同一個用戶建立太多的連接。只有在以standalone模式運行時才有效。

listen_address=IP地址
//設置在指定的IP地址上偵聽用戶的FTP請求。若不設置,則對伺服器所綁定的所有IP地址進行偵聽。只有在以standalone模式運行時才有效。對於只綁定了一個IP地址的伺服器,不需要配置該項,默認情況下,配置文件中沒有該配置項。若伺服器同時綁定了多個IP地址,則應通過該配置項,指定在哪個IP地址上提供FTP服務,即指定FTP伺服器所使用的IP地址。
注意:設置此值前後,可以通過netstat -tnl對比埠的監聽情況

accept_timeout=60
//設置建立被動(PASV)數據連接的超時時間,單位為秒,默認值為60。
connect_timeout=60
// PORT方式下建立數據連接的超時時間,單位為秒。
data_connection_timeout=300
//設置建立FTP數據連接的超時時間,默認為300秒。

idle_session_timeout=600
//設置多長時間不對FTP伺服器進行任何操作,則斷開該FTP連接,單位為秒,默認為600秒。即設置發呆的逾時時間,在這個時間內,若沒有數據傳送或指令的輸入,則會強行斷開連接。
pam_service_name=vsftpd
//設置在PAM所使用的名稱,默認值為vsftpd。

setproctitle_enable=NO|YES
//設置每個與FTP伺服器的連接,是否以不同的進程表現出來,默認值為NO,此時只有一個名為vsftpd的進程。若設置為YES,則每個連接都會有一個vsftpd進程,使用「ps -ef|grep ftp」命令可查看到詳細的FTP連接信息。安全起見,建議關閉。

9.FTP工作方式與埠設置
(1)FTP工作方式簡介
FTP的工作方式有兩種,一種是PORT FTP,另一種是PASV FTP。下面介紹其工作方式。
二者的區別在於PORT FTP的數據傳輸埠是由FTP伺服器指定的,而PASV FTP則是由FTP客戶端指定的,而且每次數據連接所使用的埠號都不同。正因為如此,所以在CuteFTP等FTP客戶端軟體中,其連接類型設置項中有PORT和PASV兩種選擇。

當FTP伺服器設置為PASV工作模式時,客戶端也必須設置為PASV連接類型。若客戶端連接類型設置為PORT,則能建立FTP連接,但在執行ls或get等需要數據請求的命令時,將會出現無響應並最終報告無法建立數據連接。

(2)與埠相關的配置
listen_port=21
// 設置FTP伺服器建立連接所偵聽的埠,默認值為21。
連接非標准埠示例:ftp www.sunflower.org 7000
connect_from_port_20=YES
// 默認值為YES,指定FTP數據傳輸連接使用20埠。若設置為NO,則進行數據連接時,所使用的埠由ftp_data_port指定。

ftp_data_port=20
//設置PORT方式下FTP數據連接所使用的埠,默認值為20。
pasv_enable=YES|NO
//若設置為YES,則使用PASV工作模式;若設置為NO,使用PORT模式。默認為YES,即使用PASV模式。
pasv_max_port=0
//設置在PASV工作方式下,數據連接可以使用的埠范圍的上界。默認值為0,表示任意埠。
pasv_mim_port=0
//設置在PASV工作方式下,數據連接可以使用的埠范圍的下界。默認值為0,表示任意埠。

10.設置傳輸模式
FTP在傳輸數據時,可使用二進制(Binary)方式,也可使用ASCII模式來上傳或下載數據。
ascii_download_enable=YES //設置是否啟用ASCII模式下載數據。默認為NO。
ascii_upload_enable=YES //設置是否啟用ASCII模式上傳數據。默認為NO。

11.設置上傳文檔的所屬關系和許可權
(1)設置匿名上傳文檔的屬主
chown_uploads=YES
//用於設置是否改變匿名用戶上傳的文檔的屬主。默認為NO。若設置為YES,則匿名用戶上傳的文檔的屬主將被設置為chown_username配置項所設置的用戶名。
chown_username=whoever
//設置匿名用戶上傳的文檔的屬主名。只有chown_uploads=YES時才有效。建議不要設置為root用戶。 但系統默root

(2)新增文檔的許可權設定
local_umask=022
//設置本地用戶新增文檔的umask,默認為022,對應的許可權為755。umask為022,對應的二進制數為000 010 010,將其取反為111 101 101,轉換成十進制數,即為許可權值755,代表文檔的所有者(屬主)有讀寫執行權,所屬組有讀和執行權,其他用戶有讀和執行權。022適合於大多數情況,一般不需要更改。若設置為077,則對應的許可權為700。
anon_umask=022 //設置匿名用戶新增文檔的umask。默認077
file_open_mode=0755 //設置上傳文檔的許可權。許可權採用數字格式。 默認0666

12.日誌文件
xferlog_enable=YES //是否啟用上傳/下載日誌記錄。默認為NO
xferlog_file=var/log/vsftpd.log //設置日誌文件名及路徑。需啟用xferlog_enable選項
xferlog_std_format=YES //日誌文件是否使用標準的xferlog日誌文件格式(與wu-ftpd使用的格式相同) 。默認為NO

13.其他設置
text_userdb_names=NO
//設置在執行ls命令時,是顯示UID、GID還是顯示出具體的用戶名或組名稱。默認為NO,以UID和GID方式顯示,若希望顯示用戶名和組名稱,則設置為YES。
ls_recurse_enable=YES
//若設置為YES,則允許執行「ls –R」這個命令,默認值為NO。在配置文件中該配置項被注釋掉了,與此類似的還有一些配置,需要啟用時,將注釋符去掉並進行YES或NO的設置即可。

❺ 已經將代碼用FTP從伺服器上下載下來了,如何把源代碼覆蓋下載下來的代碼

你可以把原來的代碼刪除後,再重新上傳代碼的,覆蓋的話很容易產生代碼的錯亂的,特別是有毒的代碼,

❻ 能否給一個java開發的具有圖形界面的ftp伺服器客戶端源代碼呢

/ **
*創建日期:2008年12月23日

*類名:Ftp.java

*類路徑:組織結構

*更改日誌:

* / 包組織結構;

進口的java.io.File;

進口java.io.FileInputStream中;

進口java.io.FileOutputStream中;

進口的java。 io.IOException;

進口sun.net.TelnetInputStream;

進口sun.net.TelnetOutputStream;

進口sun.net.ftp.FtpClient;

> / **

* @作者南山地獄

* @說明FTP操作

* /

公共類的Ftp {

/ **

* BR />獲取FTP目錄* / 公共無效getftpList(){

字元串伺服器=「IP地址 /輸入FTP伺服器/>弦樂用戶=」「;/ / FTP伺服器的登錄用戶名

字元串密碼=「」;/ /登錄FTP伺服器的用戶名

字元串路徑密碼=「」;/ / FTP路徑上的伺服器

嘗試{
> FtpClient的FTP客戶端=新FtpClient的();/ /創建FtpClient的對象

ftpClient.openServer(伺服器);/ /連接到FTP伺服器

ftpClient.login(用戶名,密碼);/ / FTP伺服器 BR />如果(path.length()= 0){

ftpClient.cd(路徑);

}

TelnetInputStream是= ftpClient.list();

詮釋三;

而{

System.out.print((char)的C)((C = is.read())= -1!);

}

掉} is.close ();

ftpClient.closeServer();/ /退出FTP伺服器

}趕上(IOException異常前){

System.out.println(ex.getMessage());

}

}

/ **

*
* /

公共無效getFtpFile(){

字元串伺服器=「」;/ / IP地址中輸入FTP伺服器

弦樂用戶=「」;/ / FTP伺服器的登錄用戶名

字元串密碼=「」;/ /登錄密碼為FTP伺服器的用戶名

字元串路徑=「路徑

字元串文件名「;/ /上=的FTP伺服器」「;/ /下載文件名稱

嘗試{

FtpClient的FTP客戶端=新FtpClient的();

ftpClient.openServer(伺服器);

ftpClient.login(用戶名,密碼);

如果(路徑。長度()= 0)

ftpClient.cd(路徑);!

ftpClient.binary();

TelnetInputStream是= ftpClient.get(文件名);

文件file_out =新的文件(文件名);

文件輸出流OS =新的文件輸出流(file_out);

位元組[]位元組=新位元組[1024];

詮釋三;

而((C = is.read(位元組))= -1){

os.write (位元組,0,C);

}!

掉} is.close();

os.close();

ftpClient.closeServer();

}趕上(IOException異常前){

System.out.println (ex.getMessage());

}

FTP}

/ **

*文件上傳到FTP

* /

公共無效putFtpFile() {

字元串伺服器=「」;/ /輸入IP地址對伺服器

字元串用戶的地址=「」;/ / FTP伺服器的登錄用戶名

字元串密碼=「」;/ / FTP伺服器登錄用戶名密碼

字元串路徑=「」就 / FTP伺服器/>字元串文件名=「」;/ /上傳的文件名

FtpClient的FTP客戶端=新的try { FtpClient的();

ftpClient.openServer(伺服器);

ftpClient.login(用戶名,密碼);

如果(!path.length()= 0)

ftpClient.cd (路徑);

ftpClient.binary();

TelnetOutputStream OS = ftpClient.put(文件名);

文件file_in =新的文件(文件名);

文件輸入流是=新的文件輸入流(file_in);

位元組[]位元組=新位元組[1024];

詮釋三;

同時(! (C = is.read(位元組))= -1){

操作系統。寫(位元組,0,C);

}

掉} is.close();

os.close();

ftpClient.closeServer();

}趕上(IOException異常前){

System.out.println(ex.getMessage());

}

}
}

❼ FTP碼是不是就是源代碼

FTP是一種文件上傳下載的傳輸方式,但是它需要一種特殊的傳輸工具軟體,這軟體當然是有源代碼的,因為軟體也是利用編程方法用代碼寫成的。簡單來說,FTP是傳輸方式,但它需要用一種工具軟體來實現它的傳輸。FTP軟體有很多,功能大同小異。

❽ 怎樣通過FTP上傳軟體把網站源代碼上傳上去

1、下載FTP軟體,安裝好;
2、新建一個連接,設置目標伺服器的埠、IP地址和目錄,意思就是說事先必須有目標伺服器的IP地址和目錄許可權,這要跟對方聯系取得。
3、雙擊新建的連接,把你想上傳的文件拖到目標目錄即可。

❾ 如何把ftp上的源代碼下載下來

這個簡單,在網站根目錄上一級建個文件夾,把選擇網站根目錄後點復制,然後粘貼到新建的文件夾裡面,把文件在裡面壓縮一下,壓縮好後,點擊壓縮文件就會下載了。

下面wwwroot就是下載的壓縮好的源碼

❿ 高分求Delhpi編譯的FTP源代碼!~~

Delphi FTP例子源碼

unit TransferThread;
////////////////////////////////////////////////////////////////////////////////
// 模塊說明: FTP傳輸核心模塊類
// 功能: 指定一個下載(上傳)的日期或文件名,系統執行傳輸功能(支持續傳)
// 備註:該模塊屬於傳輸類的一個子線程模塊.
////////////////////////////////////////////////////////////////////////////////
interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ComCtrls,StdCtrls,IniFiles,IdIntercept, IdLogBase, IdLogEvent, IdAntiFreezeBase,
IdAntiFreeze, IdFTPList,IdBaseComponent,IdGlobal,IdComponent, IdTCPConnection, IdTCPClient,IdFTPCommon,
IdFTP;

type

TTransferThread = class(TObject)
private
{ Private declarations }
//進度顯示
FProgressbar:TProgressbar;
//上傳核心組件
FFTP:TIdFTP;
//上傳列表內部類
FCombobox:TCombobox;
//上傳信息顯示
FLabel:TLabel;
//FTP地址
FFTP_STR_HOST:String;
//FTP用戶名
FFTP_STR_USN:String;
//FTP用戶密碼
FFTP_STR_PWD:String;
//FTP埠
FFTP_STR_PORT:String;
//FTP上傳標記
FFTP_STR_UTAG:String;
//FTP下載標記
FFTP_STR_DTAG:String;
//FTP指定的文件夾
FFTP_STR_FLODER:STring;
//傳輸文件大小
FFTP_LWD_BYTES:LongWord;
//傳輸開始時間
FFTP_DT_BEGINTIME:TDateTime;
//傳輸速度
FFTP_DUB_SPEED:Double;
//是否刪除源文件.
FFTP_BOL_DEL:Boolean;
//是否正在傳輸文件
FFTP_BOL_ISTRANSFERRING:Boolean;

//類內部通用對話框函數
function MsgBox(Msg:string;iValue:integer):integer;
//獲取用戶當前的Windows臨時文件夾
function GetWinTempPath:String;
//根據日期生成的日期文件名
function DateToFileName(DateTime:TDateTime):String;
//根據上傳/下載標記生成完整的文件名
function GetFileFullName(sTag:String;DateTime:TDateTime):String;
protected
//傳輸核心函數
function TransferKernel(iTag:Integer;sFile:string;bDelSFile:boolean=False):boolean;
//傳輸組件的WorkBegin事件
procere FFTPOnWorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer);
//傳輸組件的WorkEnd事件
procere FFTPOnWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
//傳輸組件的Work事件
procere FFTPOnWork(Sender: TObject; AWorkMode: TWorkMode;const AWorkCount: Integer);
public
//構造函數
constructor Create;
//析構函數
destructor Destroy;
//進度條控制項屬性
property Progressbar:TProgressbar read FProgressbar write FProgressbar default nil;
//列表控制項屬性
property Combobox:TCombobox read FCombobox write FCombobox default nil;
//只讀的FTP核心組件
property FTP:TidFTP read FFTP;
//標簽控制項
property oLabel:TLabel read FLabel write FLabel default nil;
//列表方法(該方法需要指定Combobox,否則無效)
procere List;
//依據日期下載文件
procere DownLoad(dDate:TDateTime);overload;
//依據文件名下載文件
procere DownLoad(sFileName:String);overload;
//依據日期上傳文件
procere UpLoad(dDate:TDateTime);overload;
//依據文件名上傳文件
procere UpLoad(sFileName:String);overload;

// procere Execute; override;
end;

implementation

constructor TTransferThread.Create;
var
FFini:TIniFile;
FFilePath:String;
begin
//完成FTP相關參數的讀取.
FFTP_BOL_ISTRANSFERRING:=False;
Try
FFilePath:=ExtractFilePath(APPlication.exeName)+'setup.ini';
FFini:=TIniFile.Create(FFilePath);
FFTP_STR_HOST:=FFini.ReadString('文件傳輸','伺服器地址','');
FFTP_STR_PORT:=FFini.ReadString('文件傳輸','伺服器埠','');
FFTP_STR_USN:=FFini.ReadString('文件傳輸','用戶名','');
FFTP_STR_PWD:=FFini.ReadString('文件傳輸','密碼','');
FFTP_STR_FLODER:=FFini.ReadString('文件傳輸','文件夾','');
FFTP_STR_UTAG:=FFini.ReadString('文件傳輸','上傳標識碼','');
FFTP_STR_DTAG:=FFini.ReadString('文件傳輸','上傳標識碼','');
FFTP_BOL_DEL:=FFini.ReadBool('文件傳輸','刪源文件',FALSE);
FFIni.Free;
Except
MsgBox('讀取FTP連接配置信息失敗!請檢查您的Setup.ini文件.',MB_OK+MB_ICONERROR);
Exit;
Abort;
End;
//設置FTP相關參數
Try
FFTP:=TIdFTP.Create(nil);
FFTP.Host:=FFTP_STR_HOST;
FFTP.Port:=strtoint(FFTP_STR_PORT);
FFTP.UserName:=FFTP_STR_USN;
FFTP.Password:=FFTP_STR_PWD;
FFTP.TransferType:=ftASCII;
//事件驅動
FFTP.OnWork:=FFTPOnWork;
FFTP.OnWorkBegin:=FFTPOnWorkBegin;
FFTP.OnWorkEnd:=FFTPOnWorkEnd;
FFTP.Connect(True,-1);
Except
MsgBox('連接遠程FTP伺服器失敗!'#10#13'1.伺服器地址錯誤,或伺服器不可用.'#10#13'2.用戶名或密碼不正確.'#10#13'3.FTP服務埠設置不正確.',MB_OK+MB_ICONERROR);
Exit;
Abort;
End;

end;

function TTransferThread.DateToFileName(DateTime: TDateTime): String;
var
Year, Month, Day:Word;
sYear,sMonth,sDay:String;
begin
DecodeDate(DateTime, Year, Month, Day); //日期
sYear:=inttostr(Year);
sMonth:=inttostr(Month);
sDay:=inttostr(Day);
//年
case Length(sYear) of
4: sYear:=sYear;
3: sYear:='0'+sYear;
2: sYear:='00'+sYear;
1: sYear:='000'+sYear;
else
sYear:='';
end;
//月
case Length(sMonth) of
2: sMonth:=sMonth;
1: sMonth:='0'+sMonth;
else
sMonth:='';
end;
//日
case Length(sDay) of
2: sDay:=sDay;
1: sDay:='0'+sDay;
else
sDay:='';
end;
if (sYear='') or (sMonth='') or (sDay='') then
begin
Result:='';
Exit;
end;
if (sYear<>'') and (sMonth<>'') and (sDay<>'') then
begin
Result:=sYear+sMOnth+sDay;
end;
end;

destructor TTransferThread.Destroy;
begin
FProgressbar:=nil;
FCombobox:=nil;
FLabel:=nil;
FFTP.Quit;
FFTP.Free;
end;

procere TTransferThread.DownLoad(dDate: TDateTime);
begin
if Not FFTP_BOL_ISTRANSFERRING then
begin
TransferKernel(1,GetFileFullName(FFTP_STR_DTAG,dDate),FFTP_BOL_DEL);
end;
end;

procere TTransferThread.DownLoad(sFileName: String);
begin
if Not FFTP_BOL_ISTRANSFERRING then
TransferKernel(1,sFileName,FFTP_BOL_DEL);
end;

procere TTransferThread.FFTPOnWork(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
var
S,E: String;
H, M, Sec, MS: Word;
TotalTime: TDateTime;
DLTime: Double;
begin
TotalTime := Now - FFTP_DT_BEGINTIME; //總用時
DecodeTime(TotalTime, H, M, Sec, MS); //取出時\分\秒\毫秒
Sec := Sec + M * 60 + H * 3600; //轉換成秒
DLTime := Sec + MS / 1000; //最終的下載時間
E:= Format(' 使用時間:%2d:%2d:%2d', [Sec div 3600, (Sec div 60) mod 60, Sec mod 60]);
if DLTime > 0 then
//每秒的平均速度:XX K/s
FFTP_DUB_SPEED := {(AverageSpeed + }(AWorkCount / 1024) / DLTime{) / 2};

if FFTP_DUB_SPEED > 0 then
begin
Sec := Trunc(((FFTP_LWD_BYTES - AWorkCount) / 1024) / FFTP_DUB_SPEED);
S := Format(' 剩餘時間:%2d:%2d:%2d', [Sec div 3600, (Sec div 60) mod 60, Sec mod 60]);
S:='速度: ' + FormatFloat('0.00 KB/秒',FFTP_DUB_SPEED) + S + E ;
end
else
S:='';
if (FLabel<>nil) and (assigned(FLabel)) then
begin
FLabel.AutoSize:=True;
FLabel.Caption:=S;
FLabel.Update;
end;
if (FProgressBar<>nil) and (assigned(FProgressBar)) then
begin
FProgressBar.Position:=AWorkCount; //進度顯示
FProgressBar.Update;
end;
end;

procere TTransferThread.FFTPOnWorkBegin(Sender: TObject;
AWorkMode: TWorkMode; const AWorkCountMax: Integer);
begin
FFTP_BOL_ISTRANSFERRING:=True;
FFTP_DT_BEGINTIME:=Now; //開始時間
FFTP_DUB_SPEED:=0.0; //初始化速率
if (FProgressBar<>nil) and (assigned(FProgressBar)) then
begin
if AWorkCountMax>0 then
begin
FProgressBar.Max:=AWorkCountMax;
FFTP_LWD_BYTES:=FProgressBar.Max;
end
else
FProgressBar.Max:=FFTP_LWD_BYTES;
end;
end;

procere TTransferThread.FFTPOnWorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
begin
FFTP_BOL_ISTRANSFERRING:=False;
FFTP_DUB_SPEED:=0.00;
if (FLabel<>nil) and (assigned(FLabel)) then
begin
FLabel.AutoSize:=True;
FLabel.Caption:='';
FLabel.Update;
end;

if (FProgressBar<>nil) and (assigned(FProgressBar)) then
begin
FProgressBar.Position:=0;
end;
end;

function TTransferThread.GetFileFullName(sTag:String;DateTime:TDateTime):String;
begin
Result:=sTag+DateToFileName(DateTime)+'FD.HXD';
end;

function TTransferThread.GetWinTempPath: String;
var
TempDir:array [0..255] of char;
begin
GetTempPath(255,@TempDir);
Result:=strPas(TempDir);
end;

procere TTransferThread.List;
var
Dir_List:TStringList;
FoundFolder:Boolean;
iCount:Integer;
begin
if (FCombobox=nil) or (Not Assigned(FCombobox)) then
begin
Exit;
Abort;
end;
Dir_List:=TStringList.Create; //創建字元串列表類
Try
if Not FFTP.Connected then FFTP.Connect;
FFTP.ChangeDir('/');//根目錄 //到伺服器的根目錄
FFTP.List(Dir_List,'',True); //獲取目錄列表
FoundFolder:=False;
FFTP.TransferType:=ftASCII; //更改傳輸類型(ASCII類型)
for iCount:=0 to Dir_List.Count-1 do
begin
if FFTP.DirectoryListing.Items[iCount].ItemType=ditDirectory then
begin
if Dir_List.IndexOf(FFTP_STR_FLODER)= -1 then //判斷該文件夾不存在
begin
//如果不存繼續循環查找.
Continue;
end
else
begin
//如果存在,則直接退出循環
FoundFolder:=True;
Break;
end;
end;
end;

if FoundFolder then //判斷該文件夾不存在
begin
FFTP.MakeDir(FFTP_STR_FLODER); //不存在,則創建一個新的文件夾
end;

FFTP.ChangeDir(FFTP_STR_FLODER);
FFTP.List(Dir_List,'*.HXD',False);
if Dir_List.Count>0 then
begin
FCombobox.Items:=Dir_List;
end;
Finally
Dir_List.Free;
End;
end;

function TTransferThread.MsgBox(Msg: string; iValue: integer): integer;
begin
Result:=MessageBox(application.Handle,pChar(Msg),'系統信息',iValue+MB_APPLMODAL);
end;

function TTransferThread.TransferKernel(iTag: Integer; sFile: string;
bDelSFile: boolean): boolean;
var
sTmpPath:String;
Dir_List:TStringList;
FoundFolder:Boolean;
iCount:Integer;
begin
sTmpPath:=GetWinTempPath; //獲取本地系統臨時目錄
Dir_List:=TStringList.Create; //創建字元串列表類
Try
if Not FFTP.Connected then FFTP.Connect;
FFTP.ChangeDir('/');//根目錄 //到伺服器的根目錄
FFTP.TransferType:=ftASCII; //更改傳輸類型(ASCII類型)
FFTP.List(Dir_List,'',True); //獲取目錄列表
FoundFolder:=False;
for iCount:=0 to Dir_List.Count-1 do
begin
if FFTP.DirectoryListing.Items[iCount].ItemType=ditDirectory then //是目錄
begin
if Dir_List.IndexOf(FFTP_STR_FLODER)= -1 then //判斷該文件夾不存在
begin
//如果不存繼續循環查找.
Continue;
end
else
begin
//如果存在,則直接退出循環
FoundFolder:=True;
Break;
end;
end;
end;

if FoundFolder then //判斷該文件夾不存在
begin
FFTP.MakeDir(FFTP_STR_FLODER); //不存在,則創建一個新的文件夾
end;

//更改傳輸類型
FFTP.TransferType:=ftBinary;

Try
//找到相應的目錄,則更換路徑.
FFTP.ChangeDir(FFTP_STR_FLODER);
//0為上傳
if iTag=0 then
begin
Try
FFTP.Put(sTmpPath+sFile,sFile);
Except
MsgBox('上傳文件失敗!原因如下:'#13#10'1.伺服器沒有開啟寫文件的許可權!'#10#13'2.程序發生異常,請重新上傳!',MB_OK+MB_ICONERROR);
Abort;
End;
FFTP_LWD_BYTES:=FFTP.Size(sFile);
if bDelSFile then //刪除本地源文件
begin
DeleteFile(sTmpPath+sFile);
end;
Result:=True;
FFTP.Disconnect;
end;
//1為下載
if iTag=1 then
begin
//文件已經存在
Try
FFTP_LWD_BYTES:=FFTP.Size(sFile);
if FileExists(sTmpPath+sFile) then
begin
case MsgBox('文件已經存在,要續傳嗎?'#13#10'是--續傳'#10#13'否--覆蓋'#13#10'取消--取消操作',MB_YESNOCANCEL+MB_ICONINFORMATION) of
IDYES: begin
FFTP_LWD_BYTES:=FFTP_LWD_BYTES-FileSizeByName(sTmpPath+sFile);
//參數說明: 源文件,目標文件,是否覆蓋,是否觸發異常(True為不觸發)。
FFTP.Get(sFile,sTmpPath+sFile,False,True);
end;
IDNO: begin
FFTP.Get(sFile,sTmpPath+sFile,True);
end;
IDCANCEL:
begin
FFTP_BOL_ISTRANSFERRING:=False;
end;
end;
end
else //文件不存在
begin
FFTP.Get(sFile,sTmpPath+sFile,True);
end;
Except
MsgBox('上傳文件失敗!原因如下:'#13#10'1.伺服器沒有開啟寫文件的許可權!'#10#13'2.程序發生異常,請重新上傳!',MB_OK+MB_ICONERROR);
Abort;
End;
if bDelSFile then //刪除遠程源文件
begin
FFTP.Delete(sFile);
end;
FFTP.Disconnect;
end;
Except
FFTP.Quit;
Result:=False;
End;
Finally
Dir_List.Free;
End;
end;

procere TTransferThread.UpLoad(dDate: TDateTime);
begin
if Not FFTP_BOL_ISTRANSFERRING then
TransferKernel(0,GetFileFullName(FFTP_STR_DTAG,dDate),FFTP_BOL_DEL);
end;

procere TTransferThread.UpLoad(sFileName: String);
begin
if Not FFTP_BOL_ISTRANSFERRING then
TransferKernel(0,sFileName,FFTP_BOL_DEL);
end;

end.

熱點內容
虛幻4腳本 發布:2024-10-05 16:46:29 瀏覽:205
c可以用來編譯系統軟體嗎 發布:2024-10-05 16:22:26 瀏覽:19
U盤和存儲器 發布:2024-10-05 16:22:04 瀏覽:898
cmdc語言 發布:2024-10-05 15:58:32 瀏覽:553
伺服器怎麼弄公網ip 發布:2024-10-05 15:57:02 瀏覽:642
設備配置在什麼地方 發布:2024-10-05 15:44:59 瀏覽:251
matlab外部介面編程 發布:2024-10-05 15:36:58 瀏覽:366
C事件編程 發布:2024-10-05 15:15:43 瀏覽:642
一台伺服器出現兩IP 發布:2024-10-05 15:10:05 瀏覽:928
md5加密演算法c 發布:2024-10-05 15:05:40 瀏覽:764