首页 > 其他分享 >iOS - 小文件下载篇(边下载边写入文件)

iOS - 小文件下载篇(边下载边写入文件)

时间:2023-04-06 17:36:38浏览次数:45  
标签:文件 handle self iOS urlString connection void 下载




先签订 NSURLConnectionDataDelegate

#define MSFileWithPath(path) [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:path]
 


- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSString *urlString = @"http://120.25.226.186:32812/resources/videos/minion_15.mp4";
    urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:urlString];
    
    [NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:url] delegate:self];
}

#pragma mark - <NSURLConnectionDataDelegate>
// 接收到响应的时候:创建一个空的文件
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)response {
    // 获得文件的总长度
    self.contentLength = [response.allHeaderFields[@"Content-Length"] integerValue];
    
    // 创建一个空的文件
    [[NSFileManager defaultManager] createFileAtPath:MSFileWithPath(@"minion_15.mp4") contents:nil attributes:nil];
    
    // 创建文件句柄
    self.handle = [NSFileHandle fileHandleForWritingAtPath:MSFileWithPath(@"minion_15.mp4")];
    
}
 
// 接收到具体数据:马上把数据写入一开始创建好的文件
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {

    // 指定数据的写入位置 -- 文件内容的最后面
    [self.handle seekToEndOfFile];
    
    // 写入数据
    [self.handle writeData:data];
    
    // 拼接总长度
    self.currentLength += data.length;
    
    // 进度
    self.progressView.progress = 1.0 * self.currentLength / self.contentLength;
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    // 关闭handle
    [self.handle closeFile];
    self.handle = nil;
    
    // 清空长度
    self.currentLength = 0;    
}

又是一个小例子, 没事可以看看~

标签:文件,handle,self,iOS,urlString,connection,void,下载
From: https://blog.51cto.com/u_9527606/6173841

相关文章

  • 赋值Record之间的File column 文件。
     参数说明: rb_pleasant_ID目标实体的recordID entity需要赋值文件的接受实体;privatevoidcopyFileColumnPro(IOrganizationServiceservice,Entityentity,Guidrb_pleasant_ID){//DownloadfilevarinitializeFile=newInitializeF......
  • (转)使用 Golang 创建和读取 Excel 文件
    原文:https://juejin.cn/post/7117578016858849293摘要本文提出一种使用Golang进行Excel文件创建和读取的方案。首先对问题进行分析,引出方案的基本架构;然后分章节描述了Excelize基础库的基本用法,以及Excel数据在Golang中的表示和解析方式,并进一步提出了应对大规模数......
  • 客户端下载服务端实例代码
    1.将文件以流的形式一次性读取到内存,通过响应输出流输出到前端/***@parampath想要下载的文件的路径*@paramresponse*@功能描述下载文件:*/@RequestMapping("/download")publicvoiddownload(Stringpath,HttpServletResponseresponse){try{//path是指想要......
  • 哪里有免费大文件传输平台?通过这4个网站免费来进行大文件传输
    使用电子邮件发送大文件时,可能会遇到大小文件传输的限制。这四个免费大文件传输网站让大文件传输变得轻而易举。有许多大文件传输网站,但是通常您必须经过一些步骤才能使用它们,例如创建帐户,验证电子邮件地址或进行倒计时。这四个站点具有简单的界面,不需要您创建帐户,验证电子邮件......
  • 哪里有免费大文件传输平台?通过这4个网站免费来进行大文件传输
    使用电子邮件发送大文件时,可能会遇到大小文件传输的限制。这四个免费大文件传输网站让大文件传输变得轻而易举。有许多大文件传输网站,但是通常您必须经过一些步骤才能使用它们,例如创建帐户,验证电子邮件地址或进行倒计时。这四个站点具有简单的界面,不需要您创建帐户,验证电子邮件地......
  • vue 上传大型文件插件(vue上传视频插件)
    ​IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag        客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续传......
  • python中动态导入文件的方法
    1.简介在实际项目中,我们可能需要在执行代码的过程中动态导入包并执行包中的相应内容,通常情况下,我们可能会将所需导入的包及对象以字符串的形式传入,例如test.test.run,下面将介绍如何动态导入。假设存在如下包:其中test.py的内容如下:count=1defrun():print("run")......
  • Mac应用程序无法打开提示不明开发者或文件损坏的处理方法
     在安装Mac电脑应用程序的时候,经常会遇到“xxx.app已损坏,打不开。您应该将它移到废纸篓“或”打不开的xxx.app,因为它来自身份不明的开发者”,如图:   遇到上述情况是不是真的要移动到废纸篓呢?下面小编就为您带来Mac应用程序无法打开提示不明开发者或文件损坏的处理方法,解......
  • vue前端实现上传文件,vue 上传文件
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • vue第八课:axios库的使用
    axios功能强大的网络请求库。<scriptsrc="https://unpkg.com/axios/dist/axios.min.js"></script>基础使用:axios.get(地址?key=value&key2=values).then(function(response){},function(err){})axios.get(地址,{key:value,key2:value2}).then(function(response......