美文网首页iOS开发
关于AFN下载存储路径的一个小bug

关于AFN下载存储路径的一个小bug

作者: 武小寺 | 来源:发表于2016-03-16 11:04 被阅读680次

路径的拼接问题

1. stringByAppendingString (是在后面加后缀的意思)

在模拟器上好用,真机上提示无法进行操作,改成第二种写法即可.

2.stringByAppendingPathComponent(是在后面加上“/”号连接 让它成为完整的路径)

路径拼接.png

附上下载代码:(协议可以改成block)

// 1. 建立请求
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:model.music_url]];
    
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    // 下载 存储路径
    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:model.path];
    
    operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];
    
    // 设置下载进程块代码
    /*
     bytesRead                      当前一次读取的字节数(100k)
     totalBytesRead                 已经下载的字节数(4.9M)
     totalBytesExpectedToRead       文件总大小(5M)
     */
    [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
        
        // 设置进度条的百分比
        CGFloat precent = (CGFloat)totalBytesRead / totalBytesExpectedToRead;
//        NSLog(@"%f", precent);
        if ([self.delegate respondsToSelector:@selector(downloadMusicProgress:)]) {
            [self.delegate downloadMusicProgress:precent];
        }
    }];
    
    // 设置下载完成操作
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        if ([self.delegate respondsToSelector:@selector(downloadMusic:success:)]) {
            [self.delegate downloadMusic:model success:nil];
        }
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        if ([self.delegate respondsToSelector:@selector(downloadMusic:error:)]) {
            [self.delegate downloadMusic:model error:error];
        }
    }];
    NSLog(@"加入队列");
    [_downloadQueue addOperation:operation];

相关文章

  • 关于AFN下载存储路径的一个小bug

    路径的拼接问题 1. stringByAppendingString (是在后面加后缀的意思) 在模拟器上好用,真...

  • AFNetworking下载文件

    AFN下载可以分为三个部分,初始化sessionManage对象,设置下载地址和储存路径,下载进度 初始化对象 设...

  • iOS 网络处理注意点

    一、 AFN 使用注意点 1. block循环引用 bug 解决 2.请求管理者 1.请求管理者存储到内存请求管理...

  • androidQ 关于存储权限相册图片

    关于存储位置 内部存储(Internal Storage) //路径:(data/data/packageName...

  • Android SD卡下载路径切换

    Android SD卡下载路径切换 存储机制原理及初始化 Android存储机制 原文链接: Android | ...

  • 多线程网络07

    1 AFN基本使用(GET和POST) 2 AFN实现文件下载 3 AFN实现文件上传 5 AFN序列化相关处理 ...

  • iOS下载word等文件并预览

    首先下载文件并预览这一过程,需要由下载文件路径,存储路径,预览文件三个步骤来完成。 在赋值文件路径和文件名的时候遇...

  • android内置和外置sdcard区别

    今天在写项目的时候发现了一个bug,后来发现是在android不同版本上存储路径不同。 查到一个这个问题: 以前的...

  • Android数据存储

    数据存储 数据存储--存储 第一步:路径是内部存储空间的路径 路径只能写现在这个工程的路径File file =...

  • iOS-大文件下载|断点下载|离线下载

    一、文件下载-AFN 示例代码 二、NSURLConnection 2.1 NSURLConnection下载文件...

网友评论

  • 伊织随意写:请问下,怎么用afn请求http上一整个目录的内容?
  • 梵高的老巫婆:请问一下 设置进度条时totalBytesExpectedToRead一直是-1遇到过吗?
  • 不要动:afn3.0的下载是一样的吗
    武小寺:@ios新手 3.0的话跟这个不一样,3.0这个废弃掉了
  • 不要动:喜欢
  • 漂泊的煙烣:请问一下,AFN3.x同步请求怎么用?
    武小寺:@漂泊的煙烣 AFN作者表示,暂时不计划支持同步请求,你只能按照你现在的想法来写了.

    AFN has no plans to support synchronous network requests.
    漂泊的煙烣:@天空独舞 别人给的答案,有其他解决方法望告知 NSParameterAssert(manager); // prevent infinite loop
    dispatch_async(dispatch_get_global_queue(0, 0), ^{

    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

    NSLog(@"AAA");

    [manager GET:self.paramsModel.apiUrl parameters:self.paramsModel.paramsDic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {

    [self responseResult:responseObject successBlock:successBlock];
    NSLog(@"BBB");
    dispatch_semaphore_signal(semaphore);

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    [self responsResultError:error failure:failureBlock];
    NSLog(@"BBB");
    dispatch_semaphore_signal(semaphore);
    }];

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    NSLog(@"CCC");
    });
    武小寺:@漂泊的煙烣 我最近也需要,我再github上提了问题,还没有回我,有信息了,我回复你.

本文标题:关于AFN下载存储路径的一个小bug

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