關於FTP的東西

2021-06-28 01:46:39 字數 1621 閱讀 5509

做乙個ftp的斷點續傳功能,ftp使用的是org.apache.commons.net.ftp.ftpclient

個人認為需要解決的問題有:

1、上傳的時候暫停

2、找到伺服器上是否已經存在檔案

這兩個問題解決了,斷點續傳也就差不多了

首先,怎麼將上傳的任務終止的問題

設定ftp的setcopystreamlistener,可以獲取當前上傳的進度,可以在這裡中止

中止的方法:直接退出ftp ftp.logout();

ftp.setcopystreamlistener(new copystreamlistener() 

@override

public void bytestransferred(copystreamevent arg0) {}
});

中止任務的問題解決了,那麼再看第二個問題

ftp伺服器可能會在乙個使用者下建立多個目錄,比如按天儲存上傳的檔案

這就需要遍歷伺服器上的目錄

這裡需要根據ftp伺服器的目錄結構來寫,下面**是遍歷使用者下多個目錄中的所有檔案

如果使用者下面沒有目錄,可以只用乙個迴圈,根據自己的情況修改

string str = path.substring(0, path.lastindexof("/")); // path上ftp伺服器上的路徑

if(path.endswith("/"))

ftp.changeworkingdirectory(str);

string files = ftp.listnames();

for(int i=0; i

fileinputstream in = new fileinputstream(new file(filepath));

if(in.skip(length) == length)

在最後,只要做一些ftp的其他設定

ftp.setbuffersize(max);

ftp.enterlocalpassivemode();

ftp.setfiletype(ftpclient.binary_file_type);

設定完了後上傳就好了

ftp.storefile(filename, in);
需要注意的是,如果ftp伺服器上已經存在的檔案,這個filename需要和伺服器上的name一樣,才會續傳

***************====2015.01.12***************

做斷點續傳,不知道為什麼,設定檔案指標後上傳會卡住,n...n久,完全不能接受!!

經過測試,應該是指定了檔案讀取的指標使流卡住了。

意外的發現,讓流讀取發生異常,再續傳的時候就沒問題

停止上傳修改:

在logout的地方改為inputstream.close();,主動關閉流,發生異常,停止上傳

要捕獲異常,免得程式崩潰

關於寫東西

寫作能力是需要不斷鍛鍊得來的,前期一定不要因為寫不好而不好意思去寫,這樣會惡性迴圈。你這方面不行還不去鍛鍊,那等死吧。又有人說,我沒有興趣怎麼辦?好吧,這個世界上最難的事情,就是改變別人的思維。它的難度,超越一切技術。李笑來講過興趣和做得好之間的關係,反正我是至今沒想透。但至少,我不會單純的拿沒有興...

關於FTP的學習

因為port方式在傳送資料時,由伺服器主動連線客戶端,所以,如果客戶端在防火牆或nat閘道器後面,用port方式將無法與internet上的ftp伺服器傳送檔案。這種情況需要使用pasv方式。幾乎所有的ftp客戶端軟體都支援這兩種方式。特殊的典型例子是ie,ie預設是用port方式的。如果要在ie裡...

關於學東西的耐心

都說現在社會的風氣很浮躁,學習和工作都是急於求成,缺乏耐心。我想,這種現象在我們計算機專業就應該更普遍了。計算機本就是是乙個應用學科,就是學了拿來做事的。你學一項技術,絕大部分不是為了將這項技術發揚光大,而是要會用它,拿它來做事,拿它來作為自己技能術的一部分。這種情況下,學起來想不浮躁都難。再者說,...