24-断点续传-NSURLConnection

2024-01-13 12:58

本文主要是介绍24-断点续传-NSURLConnection,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

//
//  ViewController.m
//  03-大文件下载-断点续传
//
//  Created by 张旗 on 15/5/19.
//  Copyright (c) 2015年 张旗. All rights reserved.
//#import "ViewController.h"
#import "DACircularProgressView.h"@interface ViewController ()<NSURLConnectionDataDelegate>@property (nonatomic, weak) DACircularProgressView *circleView;
@property (nonatomic, assign)long long currentLength;
@property (nonatomic, strong) NSURLConnection *conn;
@property (nonatomic,strong) NSFileHandle *writeHandle;
@property (nonatomic,assign)long long totalLength;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];DACircularProgressView *circleView = [[DACircularProgressView alloc] initWithFrame:CGRectMake(110, 50, 100, 100)];circleView.progressTintColor = [UIColor redColor];circleView.trackTintColor = [UIColor blueColor];circleView.progress = 0.00001;[self.view addSubview:circleView];self.circleView = circleView;
}- (IBAction)beginDownload:(UIButton *)button {button.selected = !button.selected;if (button.selected) {// 下载资源的路径NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/videos/test.mp4"];NSMutableURLRequest  *request = [NSMutableURLRequest requestWithURL:url];// 设置请求头NSString *range =[NSString stringWithFormat:@"bytes=%lld-",self.currentLength];[request setValue:range forHTTPHeaderField:@"range"];self.conn = [NSURLConnection connectionWithRequest:request delegate:self];}else{NSLog(@"暂停下载");[self.conn cancel];self.conn = nil;}}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}#pragma mark - NSURLConnectionDataDelegate协议中的方法/***  连接失败的时候调用**  @param connection <#connection description#>*  @param error      <#error description#>*/
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
}/***  得到服务器响应的时候调用**  @param connection <#connection description#>*  @param response   <#response description#>*/
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{NSLog(@"得到了服务器端响应");if (self.currentLength) return;// 文件路径NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];NSString *filepath = [caches stringByAppendingPathComponent:@"test.zip"];// 在沙盒中创建一个文件NSFileManager *mgr =[NSFileManager defaultManager];[mgr createFileAtPath:filepath contents:nil attributes:nil];// 创建一个用来写数据的句柄self.writeHandle = [NSFileHandle fileHandleForWritingAtPath:filepath];// 获得文件的总大小self.totalLength = response.expectedContentLength;
}/***  接收服务器端返回的数据**  @param connection <#connection description#>*  @param data       <#data description#>*/
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{NSLog(@"接收数据");// 写的文件句柄移动到文件的最末尾[self.writeHandle seekToEndOfFile];// 将数据写入沙盒[self.writeHandle writeData:data];// 累计文件的长度self.currentLength += data.length;self.circleView.progress = (double)self.currentLength / self.totalLength;
}/***  下载完成**  @param connection <#connection description#>*/
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{NSLog(@"下载完成");self.currentLength = 0;self.totalLength = 0;// 关闭文件[self.writeHandle closeFile];self.writeHandle = nil;
}
@end

这篇关于24-断点续传-NSURLConnection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/601531

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

Science|癌症中三级淋巴结构的免疫调节作用与治疗潜力|顶刊精析·24-09-08

小罗碎碎念 Science文献精析 今天精析的这一篇综述,于2022-01-07发表于Science,主要讨论了癌症中的三级淋巴结构(Tertiary Lymphoid Structures, TLS)及其在肿瘤免疫反应中的作用。 作者类型作者姓名单位名称(中文)通讯作者介绍第一作者Ton N. Schumacher荷兰癌症研究所通讯作者之一通讯作者Daniela S. Thomm

SIGMOD-24概览Part7: Industry Session (Graph Data Management)

👇BG3: A Cost Effective and I/O Efficient Graph Database in ByteDance 🏛机构:字节 ➡️领域: Information systems → Data management systemsStorage management 📚摘要:介绍了字节新提出的ByteGraph 3.0(BG3)模型,用来处理大规模图结构数据 背景

【A题成品论文已出】24数学建模国赛A题成品论文(附参考代码)免费分享

A 题  “板凳龙”  闹元宵 摘要 “板凳龙”是一种传统的民俗文化活动,通常由许多板凳连接成龙的形状进行表演。本文基于螺旋线和板凳龙的运动特性,建立数学模型来分析舞龙队在不同情况下的运动轨迹、调头路径和速度优化等问题。问题主要涉及板凳龙的行进路径、碰撞避免、调头空间的设计,以及如何优化龙头的速度,以确保龙身与龙尾的行进安全。 针对问题一,舞龙队由223节板凳组成,龙头前把手的速度为1

【Git 学习笔记_24】Git 使用冷门操作技巧(四)——更多实用 git 别名设置、交互式新增提交

文章目录 11.8 更多别名设置别名1:只查看当前分支(git b)别名2:以图表形式显示自定义格式的 git 日志(git graph)别名3:查看由于合并分支导致的冲突后仍有冲突的、待合并的文件列表(git unmerged)别名4:查看 git 状态(git st)别名5:查看 git 简要状态(git s)别名6:查看最新版本的统计信息(git l1)别名7:查看最近 5 个版本的提

Leetcode面试经典题-24.两两交换链表中的节点

解法都在代码里,不懂就留言或者私信 这里先写一个递归的解,如果后面有时间,我再写个迭代的 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val =

图形API学习工程(24):D3D11读取非DDS格式的CubeMap

工程GIT地址:https://gitee.com/yaksue/yaksue-graphics 目标 在《图形API学习工程(21):使用CubeMap纹理》中,由于DirectX读取CubeMap的教程范例都是DDS格式的纹理,因此我也首先实现了DDS的版本,期望之后做处理。 上一篇使D3D12可以用非DDS格式的CubeMap了,本篇目标将是D3D11。 分析当前的流程 当前使用D

minio实现大文件断点续传

最近工作中遇到一个需求,用户需要上传大文件几百M,为了更好的用户体验,需要支持断点续传,秒传,上传进度条等功能。需求如下:     方案有两种:     第一种:前端直接将整个大文件丢到后端,由后端来处理。后端收到文件后首先将文件分片,分片好后再将文件上传至文件服务器minio,上传期间前端通过轮询后端提供的上传进度接口展示进度,或者和后端建立websocket连接,后端推送进度前