ftp 檔案斷點續傳

2021-07-06 02:18:41 字數 3759 閱讀 3498

1、ftp 伺服器資訊實體類:

public class ftpserverbean

/*** @param hostname  伺服器位址

*/public void sethostname(string hostname)

/*** 獲取伺服器端口

* @return port 返回伺服器端口

*/public int getport()

/*** @param port  伺服器端口

*/public void setport(int port)

/*** 獲取伺服器使用者名稱

* @return username 返回伺服器使用者名稱

*/public string getusername()

/*** @param username 伺服器使用者名稱

*/public void setusername(string username)

/*** 獲取伺服器密碼

* @return password

*/public string getpassword()

/*** @param password 伺服器密碼

*/public void setpassword(string password)

/*** 建構函式

* @param hostname 伺服器位址

* @param port     伺服器端口

* @param username 伺服器使用者名稱

* @param password 伺服器密碼

*/public ftpserverbean(string hostname, int port, string username, string password)

}2、檔案上傳類:

public class ftpupload

/*** 日誌

*/private static final logger log = logger.getlogger(ftpupload.class);

/*** ftp 登陸

* @return islogin

*/public boolean ftplogin() else

// ftp伺服器連線回答

int reply = this.ftpclient.getreplycode();

if (!ftpreply.ispositivecompletion(reply))

ftpclient.setcontrolencoding("gbk");  

// conf 設定伺服器的編碼

ftpclientconfig conf = new ftpclientconfig(ftpclientconfig.syst_nt);  

conf.setserverlanguagecode("zh"); 

this.ftpclient.login(this.ftpbean.getusername(), this.ftpbean.getpassword());    // 登陸伺服器

// 設定傳輸協議

this.ftpclient.enterlocalpassivemode();

ftpclient.setfiletype(ftp.binary_file_type);

islogin = true;

} catch (exception e)

return islogin;

}/**

* ftp 關閉連線

*/public void ftplogout() catch (ioexception e) finally catch (ioexception e) }}

}/**

* ftp 上傳

* @param localpath 本地檔案路徑

* @param remotepath 遠端檔案路徑

* @return result 返回上傳是否失敗

*/public boolean upload(string localpath, string remotepath)

// 建立目錄

if(!createdirs(remotepath.substring(0, remotepath.lastindexof('/') )))

boolean result = false;

ftpfile files = null;

try catch (ioexception e)

// 如果遠端檔案已存在

if(files.length == 1)else if(remotesize > localsize)

// 移動檔案內讀取指標,實現斷點續傳  

result = uploadfile(remotepath, f, remotesize);

// 如果斷點續傳沒有成功,則刪除伺服器上檔案,重新上傳  

if(!result) catch (ioexception e)

result = uploadfile(remotepath, f, 0);  

}  }

// 如果遠端檔案不存在

else

ftplogout();

return result; 

}/**

* 上傳檔案

* @param remotepath 遠端檔案目錄

* @param localpath 本地檔案目錄

* @param remotesize 遠端檔案大小(若遠端的檔名已存在)

* @return result 返回上傳是否成功

*/@suppresswarnings("resource")

public boolean uploadfile(string remotepath, file localpath, long remotesize) catch (filenotfoundexception e)

outputstream out = null;

try

} catch (unsupportedencodingexception e) catch (ioexception e)

//檔案上傳

if(remotesize > 0) catch (ioexception e)

localreadbytes = remotesize;  

}  byte bytes = new byte[1024];  

int c;  

try

}out.flush();

raf.close();

out.close();

result =ftpclient.completependingcommand();

} catch (ioexception e)

return result;  

}/**

* ftpclient

* @return

*/private ftpclient getclient()

/*** 獲取 ftpbean

* @return ftpbean

*/public ftpserverbean getftpbean()

/*** 在伺服器上建立目錄

* @param remotepath 遠端路徑,用於建立遠端目錄

*/public boolean createdirs(string remotepath)

} catch (ioexception e)

}return true;}}

ftp斷點續傳

import open.mis.data.downloadstatus import open.mis.data.uploadstatus import org.apache.commons.net.printcommandlistener import org.apache.commons.net...

FTP實現斷點續傳

ftp客戶端實現要建立兩個通道,乙個控制命令通道,讓ftp伺服器知道客戶端要幹什麼,乙個資料傳輸通道。所謂的兩個通道只不過是兩個呼叫了connect函式的連線,只是控制命令通道專門用來傳輸一些字串命令資訊,而資料通道則是用來傳輸檔案。控制命令通道一定是由客戶端向伺服器的連線 預設的埠是21,也可以指...

FTP實現斷點續傳

ftp客戶端實現要建立兩個通道 乙個控制命令通道,讓ftp伺服器知道客戶端要幹什麼,乙個是資料傳輸通道。所謂的兩個通道只不過是兩個呼叫了connect函式的連線,只是控制命令通道專門用來傳輸一些字串命令資訊,而資料通道則是用來傳輸檔案。控制命令通道一定是由客戶端向伺服器的連線 預設的埠是21,也可以...