ASIHTTPRequest实现断点续传
ASIHTTPRequest可以实现断点续传。网上有一些介绍类似使用:
[request setAllowResumeForFileDownloads:YES];
方法的。但是它不是真正意义的断点续传。它只能让应用在下载过程中,暂停和继续。如果退出应用再进入是无效的。
不过,通过ASIHTTPRequest的异步请求以及delegate还是可以实现断点续传的。
本文还是以Grails编写断点续传服务器端为例。
异步请求的代码:
ASIHTTPRequest可以实现断点续传。网上有一些介绍类似使用:
[request setAllowResumeForFileDownloads:YES];
方法的。但是它不是真正意义的断点续传。它只能让应用在下载过程中,暂停和继续。如果退出应用再进入是无效的。
不过,通过ASIHTTPRequest的异步请求以及delegate还是可以实现断点续传的。
本文还是以Grails编写断点续传服务器端为例。
异步请求的代码:
如果要在ios中实现类似最简单的HttpClient应用的功能,可以直接用Cocoa的CFNetwork framework,但是,因为它是将C语言编写的BSD网络库做的封装,因此使用起来很繁琐。
ASIHTTPRequest是第三方HTTP编程的ObjC库。基于CFNetwork framework。网址在这里:
要使用该库,首先是下载部署。下载zip包解压缩即可。部署可见官方文档:
这里也说一下,首先该库还依赖其他框架和库:
一般来说,是增加画红线的几个框架。
在测试Tomcat对断点续传的支持中发现,Tomcat是支持静态内容的断点续传的,但是,它无法支持动态内容的断点续传。比如我有一些客户定制化数据,只有登录的用户才能下载。如果放在静态目录下,安全就形同虚设。
因此,在Grails中一般要放在WEB-INF目录的子目录下。比如:
这样的内容需要自己创建文件,然后输出到response的输出流上。因此断点续传必须自己实现。
虽然看Tomcat api中提供了对断点续传的支持。但是要确定下来就需要做实验。
还是借助编写断点续传客户端代码中的示例。另外,启动Grails项目(Grails实现复杂的数据录入),先测试一下静态资源文件:
链接是:
Grails降级后(Grails从1.4m1版本回退到1.3.7)后会不会使用的是jetty啊,测试一下:
在HttpClient下载二进制文件的基础是编写断点续传代码。
断点续传的基本原理是,客户端在发送请求中可加入比如这样的请求头:
Range: bytes=3-
表示,要服务器发送从第四个字节开始的内容。如果服务器端支持断点续传,则返回响应的码不再是200,而是206。并且发送的内容是从第四个字节开始。
下面编写了两段代码,其中第一段,模拟正常请求,但是在读取到11个字节时停止。
使用httpclient编写最简单的应用,获取我博客的主页。
httpclient在:
首先要下载分发包。然后将分发包解压缩,将lib目录下的jar文件,导入到项目中来,比如这样:
Grails引入了flash作用域的概念。这是很多高级web框架都引入的概念了。在Servlet中没有这个作用域。如果要处理这样的场景,比如更新(新建)表单提交,又重定向到表单页面,用户看不到什么变化。
比如这个界面(详见Grails实现复杂的数据录入),保存前后,都是相同的界面和相同的链接。无法让客户看出是否真的更新了。