美文网首页
IOS 下载文件Tools

IOS 下载文件Tools

作者: 谭花灵 | 来源:发表于2018-09-20 12:19 被阅读0次

使用方式:

    第一个参数写下载地址 不要拼接文件名称

    第二个参数写存储地址,有默认地址可以不写

    第三个写你下载的文件名

downloadTools * dtools = [downloadTools new];

[dtools downLoadRequest_downloadString:nil pathString:nil fileName:@"xxx.dwg"];

dtools.progressblock= ^(floatprogress) {

        nslog(@"下载中");

                };

      dtools.finishedblock= ^{

                    NSLog(@"下载完成");

                };

下面.h .m文件,可以直接粘贴

downloadTools.h

//

//  downloadTools.h

//  iOdaApp

//

//  Created by DSG on 2018/9/20.

//  Copyright © 2018年 ODA. All rights reserved.

//

#import

//progress 数值为0~1

//下载中持续调用

typedefvoid(^progressBlock)(floatprogress);

//完成时调用

typedefvoid(^finishedBlock)(void);

@interfacedownloadTools :NSObject

/**

 *  发起请求时调用(需要填入参数 url路径 (自动转换NSURL)、文件存储路径 (不要拼接文件名称)、要下载文件的名称(例如xxx.pdf或者xxxx.dwg))

 *  如果 pathString 为 nil 则默认路径为[NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)lastObject]

 */

-(void)downLoadRequest_downloadString :(NSString*)downloadString pathString:(NSString*)pathString fileName:(NSString*)fileName;

/**

 *  用来写数据的文件句柄对象

 */

@property (nonatomic,strong)NSFileHandle *writeHandle;

/**

 *  文件的总大小

 */

@property (nonatomic,assign)long long totalLength;

/**

 *  当前已经写入的文件大小

 */

@property (nonatomic,assign)long long currentLength;

/**

 *  下载过程中监听进度

 */

@property (nonatomic,strong) progressBlock progressblock;

/**

 *  下载完成时调用

 */

@property (nonatomic,strong) finishedBlock finishedblock;

@end

downloadTools.m

//

//  downloadTools.m

//  iOdaApp

//

//  Created by DSG on 2018/9/20.

//  Copyright © 2018年 ODA. All rights reserved.

//

#import "downloadTools.h"

@implementation downloadTools

{

    NSString* receivePachString;

    NSString* receiveFileName;

}

#pragma mark - NSURLConnectionDataDelegate代理方法

/**

 *  发起请求时调用(需要填入参数 url路径 (自动转换NSURL)、文件存储路径 (不要拼接文件名称)、要下载文件的名称(例如xxx.pdf或者xxxx.dwg))

 */

-(void)downLoadRequest_downloadString :(NSString*)downloadString pathString:(NSString*)pathString fileName:(NSString*)fileName{

    receivePachString= pathString;

    receiveFileName= fileName;

    NSURL*url = [NSURLURLWithString:downloadString];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    [NSURLConnection connectionWithRequest:request delegate:self];

}

/**

 *  请求失败时调用(请求超时、网络异常)

 *

 *  @paramerror      错误原因

 */

- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error

{

    NSLog(@"didFailWithError");

}

/**

 *  1.接收到服务器的响应就会调用 (先搞一个0kb的文件,然后用writeHandle关联那个文件,最后写入数据

 *  @paramresponse  响应

 */

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

{

    // 文件路径 沙盒中的caches的路径

    NSString*caches;

    if (receivePachString) {

        caches =receivePachString;

    }else{

        caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)lastObject];

    }

    NSLog(@"caches = %@",caches);

    //用这个stringByAppendingPathComponent:方法会自动添加一个/表示这是个路径

    NSString *filepath = [caches stringByAppendingPathComponent:receiveFileName];//先搞一个0kb的文件

    // 创建一个空的文件到沙盒中

    NSFileManager *mgr = [NSFileManager defaultManager];

    [mgrcreateFileAtPath:filepath contents:nil attributes:nil];

    // 创建一个用来写数据的文件句柄

    self.writeHandle = [NSFileHandle fileHandleForWritingAtPath:filepath];

    // 获得文件的总大小

    self.totalLength = response.expectedContentLength;

}

/**

 *  2.当接收到服务器返回的实体数据时调用(具体内容,这个方法可能会被调用多次)

 *

 *  @paramdata      这次返回的数据

 */

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

{

    // 移动到文件的最后面

    [self.writeHandle seekToEndOfFile];

    // 将数据写入沙盒(先移动到最后面再拼接)

    [self.writeHandlewriteData:data];//最后写入数据

    // 累计文件的长度

    self.currentLength+= data.length;

    NSLog(@"下载进度:%f", (double)self.currentLength/self.totalLength);

    //执行progressBlock

    if (self.progressblock) {

        self.progressblock((double)self.currentLength/self.totalLength);

    }

}

/**

 *  3.加载完毕后调用(服务器的数据已经完全返回后)

 */

- (void)connectionDidFinishLoading:(NSURLConnection*)connection

{

    self.currentLength =0;

    self.totalLength =0;

    // 关闭文件

    [self.writeHandle closeFile];

    self.writeHandle =nil;

    //执行finishedblock

    if (self.finishedblock) {

    self.finishedblock();

    }

}

@end

随便写了一下,需要的带走,我就希望做点好事儿匹配的时候王者荣耀队友轻点举报我

最后,我心里只有水水,我对阿狸忠心耿耿

相关文章

  • IOS 下载文件Tools

    使用方式: 第一个参数写下载地址 不要拼接文件名称 第二个参数写存储地址,有默认地址可以不写 第三个写...

  • android专项-内存分析

    MAT下载地址:mat下载 1、导出.hprof文件 1.1 使用Androidstudio—>tools—>An...

  • putty远程连接

    新建文件ssh 下载软件https://shumeipai.nxez.com/download#tools 到百度...

  • Android、iOS资源文件机翻工具

    tools_translator Android、iOS资源文件机翻工具 项目链接 前言 由于APP开发中经常需要...

  • iOS文件下载

    小文件下载 方式一,使用NSData 方式二,使用NSURLConnection 小文件下载的缺点:没法知道下载进...

  • Nexus 7 跳过首次开机时的Google网络验证

    下载安装android sdk 进入android sdk安装目录下的platform-tools 文件夹下,按住...

  • iOS采坑记录

    采坑记录 iOS 通过 Webview点击下载链接问题 Webview点击下载链接,需要通过文件名下载文件,需要通...

  • 2、iOS下给FFMpeg添加H264编码器

    1、下载h264文件 h264源文件下载2、x264-ios-master 下载这个编译文件3、把源文件放到编译文...

  • QT the command hahaha

    先下载前几个配置文件 sudo apt-get install qt4-dev-tools qt4-qtconfi...

  • adb版本升级

    1、下载最新版本 去android官网下载platform-tools的最新版本 2、将下载下包中的以下几个文件放...

网友评论

      本文标题:IOS 下载文件Tools

      本文链接:https://www.haomeiwen.com/subject/bxycsxtx.html