ASIHTTPRequest,asihttprequest下載
ASIHTTPRequest 是一款非常有用的 HTTP 訪問開源項目,ASIHTTPRequest使用起來非常方便,可以有效減少代碼量.他的功能非常強大,可以實現非同步請求,隊列請求,緩衝,斷點續傳,進度跟蹤,上傳檔案,HTTP 認證。同時它也加入了 Objective-C 閉包 Block 的支援.其官方網站: http://allseeing-i.com/ASIHTTPRequest/ 。
在使用ASI之前,需要匯入一下架構:
CFNetWork.framework
SystemConfiguration.framework
MobileCoreServices.framework
libz.dylib
因為ASI是不支援ARC的,所以如果打算使用ARC功能,也就是arc和非arc混編,需要給非 ARC 模式的代碼檔案加入 -fno-objc-arc 標籤。
一:ASIHTTPRequest實現上傳檔案功能
//上傳- (IBAction)UpLoad:(UIButton *)sender { NSURL *url=[NSURL URLWithString:@"http://localhost:8080/UploadServer/UploadServlet"]; ASIFormDataRequest *request=[ASIFormDataRequest requestWithURL:url]; [request setRequestMethod:@"POST"]; //方法一:主要應用與小檔案,將小檔案轉換為Data類型,再將Data類型的資料放入post請求體中上傳 NSData *dataImage=UIImageJPEGRepresentation([UIImage imageNamed:@"1.jpg"], 1); [request appendPostData:dataImage]; //方法二:直接從檔案路徑找到檔案,並放入post請求體中上傳,同樣適用與小檔案 [request appendPostDataFromFile:[[NSBundle mainBundle]pathForResource:@"1" ofType:@"jpg"]]; //方法三:資料流方法(檔案不分大小) //允許是從磁碟上讀取資料,並將資料上傳,預設為NO [request setShouldStreamPostDataFromDisk:YES]; [request setPostBodyFilePath:[[NSBundle mainBundle]pathForResource:@"1" ofType:@"jpg"]]; //使用非同步請求 [request startAsynchronous];}
一:ASIHTTPRequest實現檔案斷點下載
//下載- (IBAction)downLoad:(UIButton *)sender { //判斷請求是否為空白.(如果雙擊開始,會產生一個不再受控制的請求) if (_request!=nil) { return; } //如果檔案下載完畢就不再下載 if ([[NSFileManager defaultManager]fileExistsAtPath:[self getFilePath]]) { return; } NSString *string=@"http://localhost:8080/downloadSrver/xcode_6.dmg.dmg"; string=[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url=[NSURL URLWithString:string]; //建立ASIHTTPRequest請求 _request=[ASIHTTPRequest requestWithURL:url]; //設定檔案存放的目標路徑 [_request setDownloadDestinationPath:[self getFilePath]]; [_request setDownloadProgressDelegate:self]; //允許斷點續傳,必須設定 [_request setAllowResumeForFileDownloads:YES]; //設定大檔案下載的臨時路徑 //下載過程中檔案一直儲存在臨時檔案中,當檔案下載完成後才移入目標路徑下 [_request setTemporaryFileDownloadPath:[self getTemoPath]]; //設定代理 _request.delegate=self; _request.downloadProgressDelegate=self; //非同步請求 [_request startAsynchronous];}- (IBAction)pause:(UIButton *)sender { //取消請求並清除代理 [_request clearDelegatesAndCancel]; _request=nil;}-(NSString *)getTemoPath{ //設定檔案下載的臨時路徑 NSString *string=[NSTemporaryDirectory() stringByAppendingPathComponent:@"temp"]; return string;}//擷取沙箱-(NSString *)getFilePath{ NSString *document=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString *filePath=[document stringByAppendingPathComponent:@"xcode6.dmg"]; return filePath;}//擷取下載進度-(void)setProgress:(float)newProgress{ _progressVIew.progress=newProgress; _label.text=[NSString stringWithFormat:@"%.2f%%",newProgress*100];}//因為ASI是非ARC,所以系統不會自動釋放,需要手動操作-(void)dealloc{ [_request clearDelegatesAndCancel];}