ios网络学习------11 原生API文件上传之断点续传思路

#import "MainViewController.h"

@interface MainViewController ()

@end

@implementation MainViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    //下载文件
    [self download];
}

-(void)download
{
    //1. NSURL
    NSURL *url = [NSURL URLWithString:@"http://loacal/~apple/itcase/download/iTunesConnect_DeveloperGuide_CN.zip"];
    //2NSRequest
    //要判断网络服务器上文件的大小,可以使用Http的HEAD方法
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    //使用HEAD方法,仅获取目标文件的信息,而不做实际的下载工作。
    //[request setHTTPMethod:@"HEAD"];
    /**
     设置断点续传的思路:
     HeaderField:头域(请求头部的字段)
     可以通过指定range的范围逐步地下载指定范围内的数据,待下载完成后,再将这些数据拼接成一个文件。

     1根据HEAD方法获取到要下载的文件的总大小、
     2在磁盘上建立一个临时的缓冲文件,该文件的大小与目标文件大小一致
     3缓冲文件中所有字节都是默认为0
     4开启多线程,分别加载不同的range头指定的数据块,待数据块加载完成以后,将其分别写入对应的偏移地址。
     5所有数据下载完成以后,表示文件下载完成,将临时文件名更改为目标文件。

     开发的难点:
     0 在写入文件之前,首先要建立一个同等大小的文件。
     1 文件的读写问题,在oc里默认是覆盖,追加,如果要指定位置,需要用seek方法,移动文件指针。
     2在多线程写入文件时,文件的锁定操作是一个问题。
     */
    [request setValue:@"bytes=0-499" forKeyPath:@"range"];//表示只读取数据的第0个字节到第499个字节。

    //3NSURLConnection
    //如果要获取文件长度,可以在Response中获取到
    NSURLResponse *response = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
    //在response的expectedcontentlength属性中,可以获知要卸载的文件的文件长度。
    NSLog(@"%lld %d%@", [response expectedContentLength], data.length, data);

   }
@end

ios网络学习------11 原生API文件上传之断点续传思路,布布扣,bubuko.com

时间: 2024-10-11 22:08:44

ios网络学习------11 原生API文件上传之断点续传思路的相关文章

ios网络学习------10 原生API文件上传

使用原生态的api上传文件的实现: #import "MainViewController.h" @interface MainViewController () @property (weak, nonatomic) UIImageView *imageView; @end @implementation MainViewController - (void)viewDidLoad { [super viewDidLoad]; //定义Imageview并设置图像 UIImage *

面试官:请你实现一个大文件上传和断点续传

前言这段时间面试官都挺忙的,频频出现在博客文章标题,虽然我不是特别想蹭热度,但是实在想不到好的标题了-.-,蹭蹭就蹭蹭 :) 事实上我在面试的时候确实被问到了这个问题,而且是一道在线 coding 的编程题,当时虽然思路正确,可惜最终也并不算完全答对 结束后花了一段时间整理了下思路,那么究竟该如何实现一个大文件上传,以及在上传中如何实现断点续传的功能呢? 本文将从零搭建前端和服务端,实现一个大文件上传和断点续传的 demo 文章有误解的地方,欢迎指出,将在第一时间改正,有更好的实现方式希望留下你

用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传

第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 第三部分: https://www.cnblogs.com/cgzl/p/8525541.html 第四部分: https://www.cnblogs.com/cgzl/p/8536350.html 这部分就讲从angular5的客户端上传图片到asp.net core 2.0的 web api. 这是

JavaWeb学习总结(五十)——文件上传和下载

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

JavaWeb学习总结(五十)——文件上传和下载 http://www.cnblogs.com/xdp-gacl/p/4200090.html

在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

Struts2学习(八)—文件上传和下载

在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就单文件上传和多文件上传的实现进行一下讲解,这里 我们使用的struts2 web项目所导入的jar包中的**commons-fileupload-1.3.1.jar commons-io-

封装了okhttp的网络框架,支持大文件上传下载,上传进度...

本帖最后由 anjoy紫外线 于 2016-4-20 16:42 编辑   1.用法 对于Eclipse不能运行项目的,提供了apk供直接运行,位于项目根目录 okhttputils_v1.x.x.apk. 本项目Demo的网络请求是我自己的服务器,有时候可能不稳定,网速比较慢时请耐心等待.. 对于Android Studio的用户,可以选择添加: compile 'com.lzy.net:okhttputils:1.3.0'  //可以单独使用,不需要依赖下方的扩展包    compile'c

struts2学习笔记之十:文件上传

Struts2的上传 1.Struts2默认采用了apache commons-fileupload 2.Struts2支持三种类型的上传组件 3.需要引入commons-fileupload相关依赖包 * commons-io-1.3.2.jar * commons-fileupload-1.2.1.jar 4.表单中需要采用POST提交方式,编码类型需要使用:multipart/form-data 5.Struts2的Action 取得文件名称->>规则:输入域的名称+固定字符串FileN

SpringMVC学习总结(五)——SpringMVC文件上传例子

这是用的是SpringMVC-3.1.1.commons-fileupload-1.2.2和io-2.0.1 首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/20