Download

Download

0. iOS 沙盒(sandbox)机制

    iOS 应用程序只能为该程序创建的文件系统中读取文件,不可以去其他地方访问,此区域被称为沙盒,所有非代码文件都要保存在这里,例如图片,音频,属性列表,文本文件等。在此区域内的文件可读可写。相对的程序自带的资源则存放在bundle(资源束 [NSBundle mainBundle])中,这些资源只读不能写。

    每个应用程序沙盒中默认有三个目录:Documents, Library, tmp,应用程序只能在这几个目录下读写文件。

     Documents : 苹果建议将程序中建立或在程序中使用到的文件数据保存在该目录下,iTunes备份和恢复时会包括此目录。

     Library : 存储程序的默认设置或其他状态信息,iTunes备份和恢复时会包括此目录。

     Library/Caches : 存放缓存文件,此目录下的文件不会在应用退出时删除。

     tmp : 提供一个创建存储临时文件的目录。设备重启时,会丢弃所有的tmp文件。

     // 获取沙盒目录

     NSHomeDirectory();

     // 获取Documents目录

     NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

     // 获取缓存cache目录

     NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];

     // 获取库目录

     NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)[0];

     // 获取临时目录

     NSTemporaryDirectory();

     

     沙盒目录下文件的操作配合 NSFileManager 使用。

1. 文件下载

   // 从响应中获取内容的长度,并且在此创建文件处理句柄NSFileHandle,用于写入文件。下载过程中通常文件是保存在缓存区域,下载完毕后,根据需要再决定是否将完整文件拷贝或移动到其他目录下

   - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

   //  接收每次发包的数据,在此可通过文件句柄写入文件。同时可在此获取下载进度 

   - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

   // 数据接收完毕,清除进度数据,关闭句柄

   - (void)connectionDidFinishLoading:(NSURLConnection *)connection

   

   注意: 1. 并不是所有的响应都会返回内容的长度,需要服务端配合发送Content-Length。 2. 文件的写入并不是必须要使用NSFileHandle, 对于图片,文本文件之类,若不需要下载进度,仍可以使用NSData 一次性写入文件。

   断点续传

   > 原理

   当文件下载被暂停时,记录当前已下载的数据长度,下次再进入下载时,需要创建新的 发送请求,在这个新请求中设置请求头

   [request setValue:[NSString stringWithFormat:@"bytes=%lld-“,已下载长度] forHTTPHeaderField:@"Range"];

   告知服务端,此次下载从哪个地方开始传递数据,而不是从头开始传递。

   随堂练习:添加进度条

   必做作业:多文件下载管理   

2. 文件上传

    > POST方式提交

    > 设置请求头

       [mutableRequest setValue:@“multipart/form-data” forHTTPHeaderField :@“Content-Type”];

    // 注意:上传文件的设置根据服务端接口的要求进行,并不是固定的格式。

    应用:图片上传,(多图片--)

    > 设置请求体,将上传的文件以二进制形式存放NSData

       mutableRequest.HTTPBody = data;

原文地址:https://www.cnblogs.com/GJ-ios/p/5705573.html