SFTP請求網上的資料比較少,我自己也查很久才有了進展.當然這里也是使用了三方框架進行請求的,這個三方框架叫做 "NMSSH".
此框架并不支持中途的停止操作,只允許下載,中途如果網絡異常后又恢復,它還可以繼續(xù)執(zhí)行下載操作.為了滿足需求,我對框架進行了小改動,使它能夠實現暫停操作.!
首先,這個框架中有多種方案可以實現SFTP下載.我選擇使用的是其中的NMSSHChannel實現.那么如何進行終止操作呢?
- 通過NMSSHChannel.h我們可以找到一個屬性 : bufferSize
bufferSize.png
從注釋不難看出,如果不進行設置,它大小默認會給出0x4000,經過試驗,這個默認值是最大值,傳入任何比這個大的數值都會引發(fā)崩潰...
-
那么這個值是用來做什么的呢?請看下圖 :
bufferSize在.m中.png 好吧,這里我對代碼的大致理解已經寫在圖中了.不難看出,got即為當前獲取的文件總大小,而amount為服務器告訴給我們的文件實際大小,通過一個while循環(huán),實現文件的完整下載.
那么停止是如何做到?說起來也簡單,就是在你需要的時刻,將bufferSize大小設置為0,這樣就可以做到了.
-
其它需要注意的地方 :
- 當bufferSize為0時,請關閉channel,調用closeShell方法.并在內部將channel置空,返回, 目的是解決野指針崩潰問題.
內部將channel置空并返回.png - 如何實現返回小數值?目的是實現項目中高精確度需求
返回小數值.png
- 當bufferSize為0時,請關閉channel,調用closeShell方法.并在內部將channel置空,返回, 目的是解決野指針崩潰問題.