如何在iPhone中使用ASIHTTP请求暂停和恢复下载文件

时间:2011-09-22 06:18:03

标签: iphone objective-c asihttprequest

我使用ASIHTTP Request示例源代码下载网址。 我的问题是如何暂停和恢复下载文件。

请帮助。

1 个答案:

答案 0 :(得分:4)

弃用通知

ASIHTTP在2011年左右被弃用,如果您现在想要网络连接,您应该查找AFNetworking for ObjCAlamofire for Swift,或者坚持原生支持:

对于本机支持,在iOS 7中Apple添加了NSURLSession,可以启动下载任务(NSURLSessionDownloadTask),这些任务可以取消并重新启动,请检查 downloadTaskWithResumeData(_:)中的方法{ {1}},这有很好的解释。

不再需要ASIHTTP,如果你要保持遗留应用程序运行,那么,祝你好运。

原始答案

发布于2011年

ASI本身可以使用NSURLSession从文件中恢复下载,请查看How-to-Use以获取示例。

编辑:好的,暂停下载没有简单的方法([myASIRequest setAllowResumeForFileDownloads:YES];是理想的选择)。在阅读并尝试了一段时间后,结果是取消请求并再次重新发送是唯一的方法。

例如,这是我做的一个示例类:

[myRequest pause]

开始(或重新启动)下载:

@interface TestViewController : UIViewController <ASIHTTPRequestDelegate>
{
    ASIHTTPRequest *requestImage;
    UIImageView *imageViewDownload;
}

@property (nonatomic, retain) IBOutlet UIImageView *imageViewDownload;

- (IBAction)didPressPauseButton:(id)sender;
- (IBAction)didPressResumeButton:(id)sender;

在上面的例子中,我正在加载我发现的奶酪的随机图像,并存储临时下载和完整下载。

取消请求将保持临时文件的内容不变,事实上,我制作了一个UIImageView,当按下“取消”时,我可以看到下载文件的一部分。如果你想尝试一下:

- (IBAction)didPressResumeButton:(id)sender
{
    if (requestImage)
        return;

    NSLog(@"Resumed");

    // Request
    requestImage = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://www.myheadhealth.com/_IMAGES/cheese.jpg"]];

    // Using a temporary destination path just for show. 
    // Better pick a suitable path for your download.
    NSString *destinationDownloadPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"cheese.jpg"];
    NSString *temporaryDownloadPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"cheese.jpg-part"];

    requestImage.downloadDestinationPath = destinationDownloadPath;
    requestImage.temporaryFileDownloadPath = temporaryDownloadPath;
    requestImage.allowResumeForFileDownloads = YES;
    requestImage.delegate = self;
    [requestImage startAsynchronous];
}