iOS中的上传、下载流程心得
访问相册
1. 判断资源库是否有效
2. 创建imagePickerController
设置代理 弹出视图控制器
3. 实现协议方法
> iOS10 访问系统相册需要在info.plist中添加`Privacy - Photo Library Usage Description`KEY并附上该KEY的相关描述,例如`访问相册`
上传文件
服务器代码
服务器端
//获得上传的数据的长度"
int length = request.getContentLength();"
//创建⼀一个长度为length的字节数组,该字节数组存放上传的数据"
byte buffer[] = new byte[length];"
//获得servlet的输⼊入流,来读取数据"
ServletInputStream input = request.getInputStream();"
for (int i = 0; i < length; i++)"
{" //read是从输⼊入流中读取数据,而且每次读取一个字节"
buffer[i] = (byte) input.read();"
}input.close();
//创建⼀一个⽂文件输出流,把数据存到本地,需要⽂文件路径
FileOutputStream output = new
FileOutputStream("/Users/xxxx/Desktop/upload.jpg");
output.write(buffer);
output.close();
小文件
1. 构建URL
2. 构建Request 因为是上传需要在请求体中添加请求数据
使用NSMutableURLRequest
1. 设置请求方法
3. 创建会话配置
4. 根据会话配置创建session,并指定delegate和delegate回调所在队列;实现相关协议方法
1. 接收到响应
2. 接收到data
3. 任务完成
4. 上传进度
5. 构建上传任务
6. 开启任务
大文件
1. 构建URL
2. 构建请求 因为是上传需要在请求体中添加请求数据
使用NSMutableURLRequest
1. 设置请求体方法
2. 添加请求头`Content-Length`,告诉服务器上传的文件长度
3. 设置请求体上传流
3. 创建会话配置
4. 根据会话配置创建`session`,并指定`delegate`和`delegate回调的队列` 实现相关协议方法
1. 接收到响应
2. 接收到data
3. 任务完成
4. 指定请求体输入流
5. 上传进度
5. 构建上传任务
6. 开启任务
下载文件
使用本地服务端:
将要下载的文件拖放到服务器工程中的web目录下,然后文件地址就是http://127.0.0.1/工程名/资源名称
使用网络地址:
http://www.flvurl.cn/Default.aspx
普通文件
1. 构建URL
2. 构建请求 因为是下载,不需要在请求体中添加请求数据
使用NSURLRequest
3. 创建会话配置
4. 根据会话配置创建`session`,并指定`delegate`和`delegate回调的队列` 实现相关协议方法
1. 下载进度
2. 下载任务完成,因为此方法执行完毕后,系统会将下载文件删除,所以需要将文件移动或拷贝新位置
5. 构建下载任务
6. 开启任务
简单断点下载
1. 构建URL
2. 构建请求 因为是下载,不需要在请求体中添加请求数据
使用NSURLRequest
3. 创建会话配置
4. 根据会话配置创建`session`,并指定`delegate`和`delegate回调的队列` 实现相关协议方法
1. 下载进度
2. 下载任务完成,因为此方法执行完毕后,系统会将下载文件删除,所以需要将文件移动或拷贝新位置
3. 断点下载的协议方法
5. 构建下载任务
6. 开启任务
1. 根据URL下载
2. 如果支持断点下载,开启任务时根据data启动任务
7. 断点下载取消任务时将数据保存起来
真正的断点下载
### 使用NSURLSessionDataTask实现
1. 使用NSURLSessionDataTask完成基本的数据请求 并使用delegate形式获取回调
2. 返现mutableData不能满足下载文件时的需求 使用NSFileHandle
3. 在didReceiveData方法中,每接收一点数据,就写入磁盘
4. 一个已接收大小,总大小
1. 在断点下载时给已接收大小赋值
2. 在didReceiveResponse中 计算总大小
3. 在didReceiveData更新已接收大小的值
### NSFileHandle
对比NSFileManager(文件管理器)
NSFileHandle 文件处理器
NSFileManager(文件管理器) 操作整个文件或文件夹
NSFileHandle 文件处理器 操作文件内容
1.打开文件,并获取一个NSFileHandle对象,以便在后面的I/O操作中引用该文件
2.对打开的文件执行I/O操作(写入、读取) I/O就是 input/output
3.关闭文件
下面总结了一些常用的NSFileHandle的方法,在这个表中,fh是一个NSFileHandle对象,data是一个NSData对象,path是一个NSString
对象,offset是一个Unsigned long long变量,表示当前文件内容的位置
 
应该注意到,NSFileHandle类并没有提供创建文件的功能。必须使用NSFileManager方法来创建文件。因此,方法 fileHandleForWritingAtPath:和fileHandleReadingAtPath:都假定文件已经存在,否则返回nil。 对于这两个方法,文件的偏移量都设为文件的开始,所以都是在文件的开始位置开始写入
Range头
Range头域
Range头域可以请求内容的一个或者多个子范围。例如,
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节以后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,602-999
后台任务
1. 构建URL
2. 构建请求 因为是下载,不需要在请求体中添加请求数据
使用NSURLRequest
3. 创建会话配置
4. 根据会话配置创建`session`,并指定`delegate`和`delegate回调的队列` 实现相关协议方法
1. 接收到响应
2. 下载进度
3. 下载任务完成,因为此方法执行完毕后,系统会将下载文件删除,所以需要将文件移动或拷贝新位置
5. 构建下载任务
6. 开启任务
程序进入后台
7. 如果下载完成,执行UIApplication的代理方法`handleEventsForBackgroundURLSession`
在方法中调用block表示有NSURLSession事件
8. 调用`URLSessionDidFinishEventsForBackgroundURLSession`
iOS中的上传、下载流程心得的更多相关文章
- securecrt中使用上传下载sftp
securecrt中使用上传下载sftp SecureCRT这个工具自带了一个FTP,方便我们上传和下载,而且做的比较人性化,由于其基本命令和linux中基本命令大都相似,熟悉LINUX人能很容易 ...
- linux中文件上传下载
windows篇 linux文件下载到windows sz命令 登录到linux服务器使用 sz log.log 命令,弹出对话框选择下载文件的目录,点击确定即可. windows文件上传到linux ...
- 使用 TC 对LInux中vpn 上传下载进行限速(转)
TC 无需安装,Linux 内核自带 例:将vpn IP地址段192.168.1.0/24 上传下载限速为 5M 将以下内容添加到/etc/ppp/ip-up文件exit 0上面. down=5Mbi ...
- mvc中文件上传下载
//控制器 public ActionResult FileUpLoad(HttpPostedFileBase f1) { string path = Server.MapPath("~/P ...
- java中的上传下载----ajaxFileUpload+struts2
文件上传在项目中应该是非常常见的,而且很多时候,上传文件都只是一个小页面中的一个功能,要求在实现文件上传的前提下不刷新页面.而一般情况下将客户端的文件包装成网络地址传递到服务器端然后通过流来进行文件传 ...
- Struts2中文件上传下载实例
1.单文件上传 jsp页面: <!-- 单文件上传 --> <form action="Fileupload.action" method="post& ...
- FastDFS初步认识--上传下载流程介绍
什么是FastDFS FastDFS 是用 c 语言编写的一款开源的分布式文件系统.FastDFS 为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用 F ...
- [转]JSP或servlet中(以及上传下载文件)中文乱码或不显示的解决方案
时间 2014-04-14 14:33:44 CSDN博客 原文 http://blog.csdn.net/xby1993/article/details/23677375 主题 ServletJ ...
- HDFS的上传下载流程
hdfs上传流程 首先客户端向nn请求上传文件.nn经过检查回应客户端是否可以上传.客户端得到同意后向nn请求上传第一块文件的dn.nn返回给客户端dn的地址.客户端与其中一个dn1建立连接然后dn1 ...
随机推荐
- mac-文本编辑器
windows时代最喜欢的文本编辑器一直是ultraedit,但到了mac下,破解的ultraedit退出时会异常,于是琢磨着换编辑器,最终选择了sublime text2,百度下载,不注册也可以用. ...
- 怎样安装Ubuntu操作系统
(转载自:http://jingyan.baidu.com/article/ff42efa9423991c19e22020d.html) 准备工作 1. 一台普通电脑(装没装操作系统无所谓),保证电脑 ...
- C++设计模式-Bridge桥接模式
作用:将抽象部份与它的实现部份分离,使它们都可以独立地变化. 将抽象(Abstraction)与实现(Implementation)分离,使得二者可以独立地变化. 桥接模式号称设计模式中最难理解的模式 ...
- 剑指Offer:面试题30——最小的k个数(java实现)
问题描述: 输入n个整数,找出其中最小的k个数 思路1: 先排序,再取前k个 时间复杂度O(nlogn) 下面给出快排序的代码(基于下面Partition函数的方法) public void Quic ...
- JAVA 多线程和并发学习笔记(三)
Java并发编程中使用Executors类创建和管理线程的用法 1.类 Executors Executors类可以看做一个“工具类”.援引JDK1.6 API中的介绍: 此包中所定义的 Execut ...
- 最新原创:Power8伴随云计算横空出世
Power8伴随云计算横空出世 自从IBM将并不赚钱的x86服务器业务转手给联想之后,从此IBM便开始了硬件转型的新里程碑.伴随此事继续发酵的还有Power System Linux落户北京,从此IB ...
- dedecms后台验证码显示不正常的四种处理办法
验证码不正确解决方法 分为两类解决方法 第一类:取消掉验证码,直接登录 第二类:修复验证码,回复验证码功能 四种常见的处理办法如下: 第一种:取消掉验证码具体方法如下 实现的方法一共分为两步来进行: ...
- excel 作图中次横坐标及次纵坐标的调试,以及excel自定义轴标签的步骤方法
在工作中除了要做一些常用的图表之外,不时还会有一切奇怪图表的制作需求. 今天的内容主要记录的是如何对excle图表的次横坐标及次纵坐标进行调试,以及如何自定义调整轴标签 首先看下如何做次纵坐标,工作中 ...
- Linux内核分析——汇编代码执行及堆栈变化
张潇月<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验步骤 首先借助实验楼这个平台进入Linux ...
- Redis3.0.1 Stable版本的集群部署(Mac)
本文档基于如下原始文档(CentOS)创建: http://blog.csdn.net/xu470438000/article/details/42971091 修改了一些路径的错误,补全了一些命令执 ...