AFNetworking downloadTaskWithRequest:progress:destination:completionHandler:不将文件写入路径

时间:2015-06-16 10:44:41

标签: ios ios8 afnetworking-2

我正在尝试使用AFNetworking(2.5.4)下载文件。下载完成,调用完成处理程序,错误设置为nil,一切看似很好,但目标文件不存在:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSString *fullPath = [valid path from my apps local manager]
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:req progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
    return [NSURL URLWithString:fullPath];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
    NSLog(@"Saved file to %@.", filePath);
    *** [[NSFileManager defaultManager] fileExistsAtPath:filePath.absoluteString] returns NO here ***
}];
[cell.progressView setProgressWithDownloadProgressOfTask:downloadTask animated:YES];
[downloadTask resume];

文件路径是我的应用具有写入权限的常规路径:

/var/mobile/Containers/Data/Application/APP-GUID-REDACTED/Documents/FILE-NAME-REDACTED.docx

我在AFNetworking之前使用了一种不同的方法,它可以写入完全相同的路径。 HTTP响应标头完美地显示所有内容(状态200,正确的内容长度等),如果我卷曲下载URL,它会下载文件而没有任何问题。该文件没有问题。

为什么我的目标文件没有写入完成处理程序,尽管没有错误?

更新:我还试过了AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];,但它什么都没改变。我还尝试创建一个NSProgress指针并将其发送给progress参数,但无效。

2 个答案:

答案 0 :(得分:16)

使用 [NSURL fileURLWithPath:] (不是URLWithString)。

<svg viewBox="0 0 100 100">
  <foreignObject width="100%" height="100%">
    <h1>heading</h1>

    lorem ipsum dolor sit amet
  </foreignObject>
</svg> 

答案 1 :(得分:0)

此处的问题是文件路径错误或文件路径无效。我在这里遇到了同样的问题。

创建如下所示的路径:

NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
NSURL *filePathURL = [documentsDirectoryURL URLByAppendingPathComponent:[NSString stringWithFormat:@"your file name here",i]];

现在使用上面的路径:

NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:req progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
    return filePathURL;
}