访问相册



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变量,表示当前文件内容的位置

 ![1343466078_2895](./1343466078_2895.png)

应该注意到,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中的上传、下载流程心得的更多相关文章

  1. securecrt中使用上传下载sftp

    securecrt中使用上传下载sftp   SecureCRT这个工具自带了一个FTP,方便我们上传和下载,而且做的比较人性化,由于其基本命令和linux中基本命令大都相似,熟悉LINUX人能很容易 ...

  2. linux中文件上传下载

    windows篇 linux文件下载到windows sz命令 登录到linux服务器使用 sz log.log 命令,弹出对话框选择下载文件的目录,点击确定即可. windows文件上传到linux ...

  3. 使用 TC 对LInux中vpn 上传下载进行限速(转)

    TC 无需安装,Linux 内核自带 例:将vpn IP地址段192.168.1.0/24 上传下载限速为 5M 将以下内容添加到/etc/ppp/ip-up文件exit 0上面. down=5Mbi ...

  4. mvc中文件上传下载

    //控制器 public ActionResult FileUpLoad(HttpPostedFileBase f1) { string path = Server.MapPath("~/P ...

  5. java中的上传下载----ajaxFileUpload+struts2

    文件上传在项目中应该是非常常见的,而且很多时候,上传文件都只是一个小页面中的一个功能,要求在实现文件上传的前提下不刷新页面.而一般情况下将客户端的文件包装成网络地址传递到服务器端然后通过流来进行文件传 ...

  6. Struts2中文件上传下载实例

    1.单文件上传 jsp页面: <!-- 单文件上传 --> <form action="Fileupload.action" method="post& ...

  7. FastDFS初步认识--上传下载流程介绍

    什么是FastDFS FastDFS 是用 c 语言编写的一款开源的分布式文件系统.FastDFS 为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用 F ...

  8. [转]JSP或servlet中(以及上传下载文件)中文乱码或不显示的解决方案

    时间 2014-04-14 14:33:44  CSDN博客 原文  http://blog.csdn.net/xby1993/article/details/23677375 主题 ServletJ ...

  9. HDFS的上传下载流程

    hdfs上传流程 首先客户端向nn请求上传文件.nn经过检查回应客户端是否可以上传.客户端得到同意后向nn请求上传第一块文件的dn.nn返回给客户端dn的地址.客户端与其中一个dn1建立连接然后dn1 ...

随机推荐

  1. storm 配置,呵呵。

    配置项 配置说明 storm.zookeeper.servers ZooKeeper服务器列表 storm.zookeeper.port ZooKeeper连接端口 storm.local.dir s ...

  2. oracle中having的用法

    having的用法,having一般是用在group的后面,用在前面查询结果相同,但是语法上不通顺.答:having是对行组进行过滤.一般是先用where 过滤返回行,用group by 对过滤后的行 ...

  3. 剑指Offer:面试题32——从1到n整数中1出现的次数(java实现)

    问题描述: 输入一个整数n,求1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1,10,11,12,1一共出现了5次. 思路:(不考虑时间效率的解法,肯定不 ...

  4. I/O系统 (输入/输出)

    I/O系统 1:流: (1)判断到底是输入,还是输出:永远站在程序的立场上: (2)判断传递的到底是字节还是字符,从而决定管道的粗细: 字节管道可以传递所有数据,字符管道专门用来传递文本数据(1个字符 ...

  5. Objective C ARC 使用及原理

    手把手教你ARC ,里面介绍了ARC的一些特性, 还有将非ARC工程转换成ARC工程的方法 ARC 苹果官方文档 下面用我自己的话介绍一下ARC,并将看文档过程中的疑问和答案写下来.下面有些是翻译,但 ...

  6. encodeURI来解决URL传递时的中文问题

    在AJAX浏览器来进行发送数据时,一般它所默认的都是UTF-8的编码. 使用JQUERY中所提供的方法来做操作 encodeURI function verify() {    //解决中文乱麻问题的 ...

  7. struts2.3.4,jar包必须添加完整

  8. prolog 规则

    规则 规则由几个互相依赖的简单句(谓词)组成.用来描述事实之间的依赖关系,如:因果关系,蕴含关系,对应关系 规则的实质就是存储起来得查询 其语法结构如下: head:-body head 为谓词的定义 ...

  9. 如何正确建立MYSQL数据库索引

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...

  10. .net Session 超时控制

    webconfig里明明设置了timeout是很大的数值了,可是session的有效性仍然无法维持一小时. 查了一下,主要是说 mode="InProc" 的话,session是放 ...