SFTP请求网上的资料比较少,我自己也查很久才有了进展.当然这里也是使用了三方框架进行请求的,这个三方框架叫做 "NMSSH".
此框架并不支持中途的停止操作,只允许下载,中途如果网络异常后又恢复,它还可以继续执行下载操作.为了满足需求,我对框架进行了小改动,使它能够实现暂停操作.!
首先,这个框架中有多种方案可以实现SFTP下载.我选择使用的是其中的NMSSHChannel实现.那么如何进行终止操作呢?
- 通过NMSSHChannel.h我们可以找到一个属性 : bufferSize
bufferSize.png
-
从注释不难看出,如果不进行设置,它大小默认会给出0x4000,经过试验,这个默认值是最大值,传入任何比这个大的数值都会引发崩溃...
-
那么这个值是用来做什么的呢?请看下图 :
bufferSize在.m中.png -
好吧,这里我对代码的大致理解已经写在图中了.不难看出,got即为当前获取的文件总大小,而amount为服务器告诉给我们的文件实际大小,通过一个while循环,实现文件的完整下载.
-
那么停止是如何做到?说起来也简单,就是在你需要的时刻,将bufferSize大小设置为0,这样就可以做到了.
-
其它需要注意的地方 :
- 当bufferSize为0时,请关闭channel,调用closeShell方法.并在内部将channel置空,返回, 目的是解决野指针崩溃问题.
内部将channel置空并返回.png - 如何实现返回小数值?目的是实现项目中高精确度需求
返回小数值.png
- 当bufferSize为0时,请关闭channel,调用closeShell方法.并在内部将channel置空,返回, 目的是解决野指针崩溃问题.
网友评论