如何取消 AFdownloadrequest 操作而不保留以前的进度(删除临时文件) iOS

Posted

技术标签:

【中文标题】如何取消 AFdownloadrequest 操作而不保留以前的进度(删除临时文件) iOS【英文标题】:How to cancel an AFdownloadrequestoperation and not retain previous progress(delete the temporary file) iOS 【发布时间】:2014-05-12 08:56:58 【问题描述】:

我正在从服务器下载文件。 我能够成功下载文件。 但是每当我取消下载请求(在两者之间)操作并重新开始下载时。 下载从上一个进度开始(不是从零开始)。 但我想从零开始下载。

设置operation.deleteTempFileOnCancel = YES;也无济于事

当我取消下载时,没有在给定的目标路径创建文件

operation.tempPath is returning null (not able to delete temporary file)

我正在使用以下代码

     NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:model.downloadUrl]];
     operation = [[AFDownloadRequestOperation alloc] initWithRequest:request targetPath:path shouldResume:YES];
     operation.deleteTempFileOnCancel = YES;


            // download operation progressive block
            [operation setProgressiveDownloadProgressBlock:^(AFDownloadRequestOperation *operation, NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpected, long long totalBytesReadForFile, long long totalBytesExpectedToReadForFile)
             
                 // calculate current download progress

                 
             ];

            // download operation completion block
            [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
             


              

            failure:^(AFHTTPRequestOperation *operation, NSError *error) 

                 // operation failed


             ];

           [operation start];

如果在中间取消下载然后重新开始,我想从零开始下载。我正在使用 ios 7

【问题讨论】:

你解决了吗?我现在也在和这个作斗争。 您使用的是AFNetworkingAFDownloadRequestOperation 的哪个版本? 我使用此代码但下载的文件未显示在文件夹中,请尽快回复 【参考方案1】:

好吧,我刚刚找到了解决方法。我会在这里发布,以防其他人遇到同样的问题。

在这一行之后,您可以检查是否实际创建了 tempPath

operation = [[AFDownloadRequestOperation alloc] initWithRequest:request targetPath:path shouldResume:YES];
NSLog("%@", operation.tempPath);

然后将该路径添加到字典中

NSString *tempPath = _operation.tempPath;
[self.tempPathDict setObject:tempPath forKey:your_key];

当您停止操作时,您会调用此代码

NSString *tempPath = [self.tempPathDict objectForKey:your_key];
// Cancel the operation you want
[operation cancel];
// Remove the tempFile 
NSError *error = [[NSError alloc] init];
[[NSFileManager defaultManager] removeItemAtPath:tempPath error:&error];
// And last remove the path from the dictionary
[self.tempPathDict removeObjectForKey:your_key];

【讨论】:

会试试这个并告诉你:) 我看到AFDownloadRequestOperation里面有一个deleteTempFileOnCancel属性,但是我做[operation cancel]的时候好像没有触发删除,所以我们需要手动删除。

以上是关于如何取消 AFdownloadrequest 操作而不保留以前的进度(删除临时文件) iOS的主要内容,如果未能解决你的问题,请参考以下文章

如何立即取消 curl 操作?

.chosen.change() - 如何判断它是选择还是取消选择操作

如何取消并从UIAlertView调用用户操作

git 如何取消add操作

Django 自定义管理操作:如何在完成时取消选择?

如何从 UIAlertView 获取取消和调用用户操作