AFNetworking 文件下载错误 Error Domain=NSCocoaErrorDomain Code=260

Posted

技术标签:

【中文标题】AFNetworking 文件下载错误 Error Domain=NSCocoaErrorDomain Code=260【英文标题】:AFNetworking file downloading error Error Domain=NSCocoaErrorDomain Code=260 【发布时间】:2016-03-15 08:17:11 【问题描述】:

我正在使用 AFNetworking 3.0.4 下载视频文件及其进度报告。该文件似乎下载成功,但是当我保存此文件并尝试获取文件属性时,它给了我以下错误。

Error Domain=NSCocoaErrorDomain Code=260 "The file “7598-Y2TKGNGSEG93SIT.mp4” couldn’t be opened because there is no such file." UserInfo=NSFilePath=/var/mobile/Containers/Data/Application/919E2138-6327-4651-89A2-FCA951FDC128/Documents/video/7598-Y2TKGNGSEG93SIT.mp4, NSUnderlyingError=0x15e995970 Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"

我正在使用这一行来获取文件属性。

 NSError *fileError;
      NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[filePath absoluteString] error:&fileError];

这里的 fileAttributes 字典是 nil,它在 fileError 变量中给出了上述错误。

这是我的完整代码

- (void)downloadFile:(MyObject *)myObj progress:(void (^)(float))progress success:(void (^)(NSString *filename))success failure:(void (^)())failure 


  NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
  AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];

  NSURL *URL = [NSURL URLWithString: myObj.downloadUrl];
  NSURLRequest *request = [NSURLRequest requestWithURL:URL];

  NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) 
    NSLog(@"Completed : %f", downloadProgress.fractionCompleted);
    dispatch_async(dispatch_get_main_queue(), ^
      [self progressBlocksForUrl: myObj.archiveUrl withProgress:downloadProgress.fractionCompleted];
    );
    destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) 
    NSLog(@"Destination");
    NSURL *url = [NSURL URLWithString:myObj.archiveUrl];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *videoPath = [NSString stringWithFormat:@"/%@/%@", @"video", [url lastPathComponent]];
    NSString *fullPath = [[paths firstObject] stringByAppendingPathComponent:videoPath];
    return  [NSURL URLWithString:fullPath];
    completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) 


     NSHTTPURLResponse * myresponse = (NSHTTPURLResponse *)response;
     NSLog(@"Video downloaded, headers: %@", [myresponse.allHeaderFields description]);

    if(error) 
      NSLog(@"Error downloading video from %@: %@", myObj.archiveUrl, [error description]);
      [self failureBlockForUrl:myObj.archiveUrl];
     else

      NSError *fileError;
      NSDictionary *fileAttributes = [[NSFileManager defaultManager] attributesOfItemAtPath:[filePath absoluteString] error:&fileError];

      if (fileError) 
        NSLog(@"ERR: %@", [fileError description]);
        [self failureBlockForUrl:myObj.archiveUrl];
       else 
        NSNumber *fileSizeNumber = [fileAttributes objectForKey:NSFileSize];
        long long fileSize = [fileSizeNumber longLongValue];
        NSLog(@"File %@ with size %lld downloaded!", filePath, fileSize);
        [self completionBlocksForUrl:myObj.archiveUrl withFilename:[filePath absoluteString]];
      
    

  ];


  [downloadTask resume];

可以请一些人指导我在这里做错了什么。任何帮助将不胜感激。谢谢

【问题讨论】:

【参考方案1】:

网址有两种。

file:///Users/xxx/Library/Developer/

/Users/xxx/Library/Developer/

当您设置一个用于存储下载文件的 url 时,您应该使用第一个。当您通过NSFileManager 从磁盘取回它时,您应该使用第二个。因此,请进行以下更改。

return [NSURL fileURLWithPath:fullPath];

[[NSFileManager defaultManager] attributesOfItemAtPath:[filePath path] error:&fileError];

【讨论】:

以上是关于AFNetworking 文件下载错误 Error Domain=NSCocoaErrorDomain Code=260的主要内容,如果未能解决你的问题,请参考以下文章

cocoapods导入afnetworking报错问题

使用 AFNetworking 发布请求 Amazon S3

AFNetworking -1017 错误

错误:请求失败:错误请求(400)通过afnetworking快速登录

IOS中的Afnetworking抛出错误

AFNetworking 2.0:多部分 POST 时出现错误 503