iOS进阶_WebDav(五.WebDav的上传进度&多线程下载思路)

2023-11-01

WebDav的上传进度

#import "ViewController.h"

@interface ViewController ()<NSURLSessionTaskDelegate>
/** 会话  */
@property(nonatomic,strong)NSURLSession * session;
@end

@implementation ViewController

-(NSURLSession *)session
{
    if (!_session) {
        NSURLSessionConfiguration * config = [NSURLSessionConfiguration defaultSessionConfiguration];
        _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
    }
    return _session;
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    [self putUpload]; 
}

#pragma mark - <上传演练>
-(void)putUpload{
    //1.url - URL是直接保存在服务器上的文件名
    NSURL * url = [NSURL URLWithString:@"http://192.168.31.180/uploads/123.wmv"];
    //2.请求
    NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];
    //设置请求方法-webdav上传需要使用put方法
    request.HTTPMethod = @"PUT";
    //设置身份验证的数据
    NSString * authStr = [self base64Encode:@"admin:123456"];
    authStr = [@"BASIC " stringByAppendingString:authStr];
    //设置请求头
    [request setValue:authStr forHTTPHeaderField:@"Authorization"];

    //3.session
    //上传的源文件的路径!!
    NSURL * fileUrl = [[NSBundle mainBundle] URLForResource:@"abc.wmv" withExtension:nil];
    // 上传任务如果跟进进度,可以同时使用代码块Blcok的方式
    [[self.session uploadTaskWithRequest:request fromFile:fileUrl completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

        NSLog(@"%@ %@",str,response);

    }] resume];
}

#pragma mark - <代理>

/**
 参数:
 session
 task

 bytesSent                  本次发送的字节数
 totalBytesSent             已经发送的字节数
 totalBytesExpectedToSend   总字节数(文件总大小)
 */
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
{
    float progress = (float)totalBytesSent / totalBytesExpectedToSend;
    NSLog(@"%f %@",progress,[NSThread currentThread]);
}

多线程下载思路

无论是上传还是下载默认都是在单线程中的
例如面试中会被问道:如何实现多线程下载(注意:多线程不是指子线程!)

多线程下载同一个文件的实现思路

1.获取服务器上的文件大小
2.在本地创建一个相同大小的文件,所有字节都是0(注意:写入文件不能使用输出流NSOutputStream,而是需要使用NSFileHande)
3.开启多条线程(假设开启两条线程)

这里写图片描述

两条线程分别拿Rang bytes0-4,和Rang bytes5-8的数据

这里写图片描述

当其中一条线程拿到数据后,Rang bytes会逐渐缩减
这里写图片描述

写入文件的时候,使用的是NSFileHande,根据seekOffset依次顺序写入
1、记录每一条线程当前的offset
2、如果要支持多线程下载且断点续传,就需要建立一个plist/json保存每一条线程末次执行的offset

注意:其实在实际开发中,移动端不适合多线程下载,因为消耗资源大,会出现耗电快,手机发烫现象。

那能否支持多线程上传文件呢?

答案是不能!服务器不可能为了一个特殊的用户开启多线线程,提交只能顺序提交

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS进阶_WebDav(五.WebDav的上传进度&多线程下载思路) 的相关文章

  • iOS进阶_密码学进阶(一.对称加密算法简介)

    加密算法 HASH 散列函数 不可逆 密码 识别 文件 识别 以下两种加密算法 都是可逆的 明文 gt 加密 gt 密文 密文 gt 解密 gt 明文 对称加密 传统加密算法 加密和解密使用同一个 密钥 密钥的保密工作就非常的重要 密钥会定
  • iOS进阶_密码学进阶(二.对称加密算法代码演练)

    对称加密算法代码演练 终端测试指令 DES ECB 加密 echo n hello openssl enc des ecb K 616263 nosalt base64 DES CBC 加密 echo n hello openssl enc
  • iOS架构师_观察者模式

    定义 观察者模式 有时又被称为模型 视图 View 模式 源 收听者 Listener 模式或从属者模式 一个目标物件管理所有相依于它的观察者物件 并且在它本身的状态改变时主动发出通知 这通常透过呼叫各观察者所提供的方法来实现 此种模式通常
  • iOS架构师_UML建模语言

    UML UML统称建模语言 面向对象软件的表转化建模语言 包含Booch MOT OOSE 工具 StarUML 时序图
  • iOS中socket通信---基于CocoaAsyncSocket实现

    前言 最近项目中涉及到socket通信这块 所以有幸有时间大概看了一下这一块 目前还在实现阶段 因此现在还不能去些具体的实现过程 现在只大概描述一下这几天看的资料和自己的一点心得吧 等项目实现之后会将具体的实现流程写出来以供大家参考 Soc
  • iOS进阶_GCD(二.GCD串行队列&并发队列)

    GCD 核心概念 将任务添加到队列 指定任务执行的方法 任务 使用block封装 block 就是一个提前准备好的代码块 在需要的时候执行 队列 负责调度任务 串行队列 一个接一个的调度任务 并发队列 可以同时调度多个任务 任务执行函数 任
  • iOS进阶—Runtime基础

    iOS进阶 目录 GitHub参考 RunTime 基础 一个程序的执行过程 大概就是代码 gt 编译链接 gt 执行 C语言 import
  • iOS进阶_WebDav(五.WebDav的上传进度&多线程下载思路)

    WebDav的上传进度 import ViewController h interface ViewController
  • iOS架构师_架构模式(代理,block,通知,MVC,MVP,MVVM)

    1 什么是架构 没有明确的定义 属于设计的一方面 没明确的把设计和架构进行区分 它可以小到类与类之间的交互 大到不同模块之间 以及不同业务之间的交互 都可以从架构的层面去理解它 所有架构和设计模式的目的都是为了解耦合 2 基本的架构基础 案
  • iOS架构-组件化(Carthage管理工具)

    一 Carthage项目管理工具使用 Step 1 安装 更新Homebrew工具 1 usr bin ruby e curl fsSL https raw githubusercontent com Homebrew install ma
  • iOS架构师_SDWebImage源码分析

    1 对SDdemo的分析 针对SD的3 8 2版本进行分析 因为从git上面直接下载SD的源码 项目运行会报错 缺少libwebp这个库 我们下载3 8 2版本 运行 libwebp 是个webp的图片格式 属于谷歌的库 所以只能翻墙去国外
  • iOS自动化布局-AutoLayout约束优先级

    约束的优先级 AutoLayout添加的约束中也有优先级 Priority 优先级的数值1 1000 分为两种情况 一种情况是我们经常添加的各种约束 默认值1000 最大值 优先执行 条件允许的话系统会自动满足我们的约束需求 第二种就是固有
  • Objective-C实现链式编程语法(DSL)

    您越着急开始写代码 代码就会花费越长的时间 Carlson University of Wisconsin 前言 熟悉Objective C这一门编程语言的人都知道 Objective C中方法的调用都是通过中括号 实现的 比如 self
  • iOS进阶_NSURLConnection(被弃用的原因:Connection的缺点)

    NSURLConnection下载 我们在前面的文章中介绍了MAC电脑搭建Apache服务器 在Sites文件夹中放置一个视频文件MVVM mp4 pbb 通过NSURLConnection进行下载 访问http localhost 我们可
  • iOS架构师_消息转发机制

    1 动态方法解析 对象在收到无法处理的消息时 会调用下面的方法 前者是调用类方法时会调用 后者是调用对象方法时会调用 未实现类方法调用 BOOL resolveClassMethod SEL sel 未实现实例方法调用 BOOL resol
  • iOS进阶_Log分类打印日志自动转换中文

    description方法是NSObject类的一个实例方法 因此所有的Object C对象都有description方法 description方法返回的永远是字符串 对于一个Person类 如果没有重写description方法 NSL
  • iOS开发 多线程的高级应用-信号量semaphore

    在iOS开发的道路上 多线程的重要性不言而喻 大部分我们都停留在基础的使用上面 缺乏高级应用 缺乏提升 是因为我们面对他太少 复杂的事情重复做 复杂的事务基础化 差距就是这样拉开了 言归正传 今天讲讲GCD的高级应用之信号量篇 一 信号量的
  • iOS进阶_NSURLSession(二.断点续传)

    断点续传 从上一篇文章中 我们了解了使用NSURLSession进行文件下载 我们在其基础上继续探索NSURLSession的断点续传 在NSURLSession中 我们使用reumeData来存储下载的数据进度 import ViewCo
  • iOS进阶_kvc使用注意事项

    细节1 我们在项目中使用kvc 在设置model属性的时候 注意尽量不要使用基本数据类型 实例 数据模拟 注意age是null类型的 Person h import
  • iOS架构-组件化(项目框架搭建2)

    静态库引用静态库 如果像上图一样 直接在业务层组件引用数据层组件的文件 则会报错 因为组件之间没有建立引用关系 如下图 静态库如何引用Pods第三方库 拷贝Podfile文件到项目 打开终端执行pad install 直接引用Pod下面的Y

随机推荐

  • 解决:IDEA不能识别*.js文件

    在进行IDEA进行前端开发时 必不可少的会用到JavaScripts 在进行 js文件时 发现其不识别 为文本样式 如下图所示 Setting gt Editor gt File Types gt JavaScript gt 填写 js 这
  • ethers不同版本返回余额的整数值类型,以及对大整数值的处理差异性的比较

    目录 一 安装6v版本 二 安装5v版本 三 ethers 5v版本 1 获取余额 2 对于数值的处理
  • host command not found,host命令不可用的问题

    如果出现host command not found host命令不可用的问题 如果在centos环境下使用yum install bind utils进行安装bind utils的软件包 如果是unbuntu环境下可以使用sudo apt
  • Keil5编译——Error: L6218E: Undefined symbol

    1 具体问题 在初学RTThread着手最基础的 动态内存分配线程来控制LED闪烁 keil5编译时遇到以下的错误提示 STM32L431RC BearPiLED STM32L431RC BearPiLED axf Error L6218E
  • 今天软件开发面临的挑战

    1 开发模式的进化 2 软件工程意识的觉醒 3 软件过程的可视化管理 4 团队开发与合作 5 可重用性 可维护性和灵活性 6 质量控制和成本控制 7 加快上市时间 8 提高竞争优势
  • 街霸五显示登录服务器,pc版的街霸五如何登陆服务器

    发布时间 2016 03 27 Bungie与动视合作的首款FPS大作正式版将与9与9日登陆PS4和Xbox One PC版何在 动视目前已经确认PC版的正在制作中 但是动视并未透露详细的上市日期 不过已经有细心 标签 游戏资讯 游戏新闻
  • 窗函数设计FIR滤波器

    文章目录 实验原理 常见的窗函数 矩形窗Boxcar 巴特利特窗Bartlett 汉宁窗Hanning 哈明窗Hamming 布莱克曼窗Blackman 凯泽窗Kaiser 设计步骤 MATLAB实现 实验原理 有限单位冲激响应序列 h n
  • CV计算机视觉核心03-初步认识机器学习(线性回归模型、梯度下降法、线性回归模型解决数字识别问题(没用auto grad)、逻辑回归模型sigmoid、作业:线性回归解决数字识别auto grad)

    CV计算机视觉核心03 初步认识机器学习 线性回归模型 梯度下降法 区分一下回归模型和分类模型 线性回归模型解决数字识别问题 没有使用auto grad 逻辑回归模型 sigmoid函数 如何使用自动梯度计算 auto grad使用的注意事
  • SPEOS—光学产品设计及仿真工具

    SPEOS是ANSYS公司功能强大的光学仿真软件 用于光学设计 环境与视觉模拟 成像仿真等 强大的解决方案提供了可视化光学系统和直观的人机交互平台 其仿真技术已广泛用于汽车 电子电器 精密仪器 照明设备等领域 SPEOS软件内嵌ISO和CI
  • 01趣味算法 ---- 走进算法

    14天阅读挑战赛 努力是为了不平庸 算法学习有些时候是枯燥的 这一次 让我们先人一步 趣学算法 欢迎记录下你的那些努力时刻 算法学习知识点 算法题解 遇到的算法bug 等等 在分享的同时加深对于算法的理解 同时吸收他人的奇思妙想 一起见证技
  • go语言结构体与JSON序列化

    JSON JavaScript Object Notation 是一种轻量级的数据交换格式 易于人阅读和编写 同时也易于机器解析和生成 JSON键值对是用来保存JS对象的一种方式 键 值对组合中的键名写在前面并用双引号 包裹 使用冒号 分隔
  • Linux笔记_4(群组和文件目录属性)

    Linux笔记 4 标签 空格分隔 Linux 使用者与群组 1 在Linux里面 每个档案都有 Users Group Others 三种身份的权限 a 档案拥有者 b 群组 每个账号可以在多个群组中 c 其他人 2 预设情况下 系统上所
  • Word临时文件怎么恢复?可持续的文件恢复方法

    在word进行文档编辑时 有时候会发生误删除word文件的情况 这个时候word临时文件怎么恢复呢 其实word临时文件还存在于电脑中 本篇文章就来为大家讲解word临时文件怎么恢复 word临时文件在哪个文件夹 如果你在编辑文件时 没有手
  • STL迭代器简介

    标准模板库 The Standard Template Library STL 定义了五种迭代器 下面的图表画出了这几种 input output forward bidirectional random access 要注意 上面这图表并
  • 实现简易版——MyLinkedList

    class Node String val Node pre 双向 Node next Node String val this val val public class MyLinkedList private Node head 头结点
  • 视频号短视频创作需要注意的6个剪辑技巧(细节提高推荐率)

    昨天 老蒋有在 视频号短视频创作不能做的8件事情 文章中总结到我们在视频号创作短视频的时候几个不应该做的事情可能会导致账户被封 作品被限流的问题 继续接着这个话题 我们来聊一聊短视频需要注意的几个剪辑技巧 这些细节可能会提高用户的阅读体验
  • 频繁读写文件导致内存使用率过高

    最近接到一个客户反馈 说是服务器内存使用过高 总内存16G 使用top命令查看可用内存已经不足1G了 客户环境服务器为linux 部署了3个tomcat 每个tomcat均有大量的日志产生 让客户使用free m检查一下 此处有必要解释一下
  • 【IKE协商第二阶段快速模式协商过程】

    今天带大家了解一下IKE协商第二阶段快速模式协商过程 IKE协商第二阶段快速模式协商过程 第二阶段共产生3个交互报文 都是被第一阶段的ISAKMP IKE SA中的加密算法 验证算法所保护 IKE协商第二阶段的目的是产生最终用于加密和验证I
  • 常见DML语句汇总

    DML操作是指对数据中表记录的操作 主要包括表记录的插入 insert 更新 update 删除 delete 和查询 select 是开发人员日常使用最频繁的操作 下面依次对它们进行介绍 1 插入记录 INSERT INTO tablen
  • iOS进阶_WebDav(五.WebDav的上传进度&多线程下载思路)

    WebDav的上传进度 import ViewController h interface ViewController