您好,登錄后才能下訂單哦!
創建一個ASINetworkQueue全局隊列,隊列里可以添加請求
- (void)viewDidLoad
{
queue = [[ASINetworkQueue alloc] init];
//設置支持較高精度的進度追蹤
[queue setShowAccurateProgress:YES];
//啟動
[queue go];
}
緊接著創建我們的下載請求:
- (IBAction)startDownload
{
//Documents路徑
NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
//下載路徑
downloadPath = [[path stringByAppendingPathComponent:@"A.txt"] retain];
//要支持斷點續傳,緩存路徑是不能少的。
NSString *tempPath = [path stringByAppendingPathComponent:@"A.temp"];
//下載鏈接
NSURL *url = [NSURL URLWithString:@""];
//創建請求
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
//設置代理,別忘了在頭文件里添加ASIHTTPRequestDelegate協議
request.delegate = self;
//設置下載路徑
[request setDownloadDestinationPath:downloadPath];
//設置緩存路徑
[request setTemporaryFileDownloadPath:tempPath];
//設置支持斷點續傳
[request setAllowResumeForFileDownloads:YES];
request.downloadProgressDelegate = self;
[queue addOperation:request];
}
//請求開始
- (void)requestStarted:(ASIHTTPRequest *)request;
//請求收到響應的頭部,主要包括文件大小信息,下面會用到
- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders;
//請求將被重定向
- (void)request:(ASIHTTPRequest *)request willRedirectToURL:(NSURL *)newURL;
//請求完成
- (void)requestFinished:(ASIHTTPRequest *)request;
//請求失敗
- (void)requestFailed:(ASIHTTPRequest *)request;
//請求已被重定向
- (void)requestRedirected:(ASIHTTPRequest *)request;
下面是我們對頭部信息的處理
- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders
{
NSLog(@”%@”,responseHeaders);
if (fileLength == 0) {
fileLength = request.contentLength/1024.0/1024.0;
totalPro.text = [NSString stringWithFormat:@"%.2fM",fileLength];
}
}
我們可以從中看到文件大小等一些請求信息,這時request自己也知道了文件大小,所以我們直接使用request的contentLength屬性
這是處理進度的方法(request會自動調用該方法):
- (void)setProgress:(float)newProgress
{
progressView.progress = newProgress;
currentPro.text = [NSString stringWithFormat:@"%.2fM",fileLength*newProgress];
}
下面是暫停方法用來測試斷點
- (IBAction)pauseDownload
{
//operations方法返回隊列里的所有請求,但我們只有一個請求
ASIHTTPRequest *request = [[queue operations] objectAtIndex:0];
//取消請求
[request clearDelegatesAndCancel];
}
隊列里只有一個請求。
這里說是暫停,其實request已經完全被取消了!下面說說斷點續傳
因為開啟了斷點續傳,并且設置了緩存路徑,所以request取消時就會在緩存文件里打斷點,當我們在次執行上面的startDownload方法時,緩存路徑還是之前的緩存路徑,request會自動從緩存文件中的斷點后開始下載,頭部中的文件大小值也是從斷點之后開始算的。ASIHTTPRequest已經為你打點好了一切。
繼續,當請求完成時,也就是我們的文件已經下載好了的時候,下載好的文件會在我們之前指定的下載路徑下生成,同時緩存文件會被刪除。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。