ios自带NSURLConnection下载文件
//同步下載,同步請求的主要代碼如下
- (IBAction)downLoad:(id)sender {
? ? NSString *urlAsString=@"http://7jpnsh.com1.z0.glb.clouddn.com/TravelDemo.plist";//文件地址
? ? NSURL *url=[NSURL URLWithString:urlAsString];
? ? NSURLRequest *request=[NSURLRequest requestWithURL:url];
? ? NSMutableData *error=nil;
? ? NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
?? ?
? ? //文件保存目錄
? ? NSString *cachePath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
? ? NSLog(@"%@",cachePath);
? ? NSString *filename=[cachePath stringByAppendingPathComponent:@"TravelDemo.plist"];
? ? /*下載的數(shù)據(jù)*/
? ? if (data!=nil) {
? ? ? ? NSLog(@"下載成功");
? ? ? ? if ([data writeToFile:filename atomically:YES]) {
? ? ? ? ? ? NSLog(@"保存成功");
? ? ? ? }else
? ? ? ? {
? ? ? ? ? ? NSLog(@"保存失敗");
? ? ? ? }
? ? }else{
? ? ? ? NSLog(@"%@",error);
? ? }
}
?
//異步下載,異步請求的代碼如下
- (IBAction)downLoad:(id)sender {
?? NSString *urlAsString=@"http://7jpnsh.com1.z0.glb.clouddn.com/TravelDemo.plist";
? ? NSURL *url=[NSURL URLWithString:urlAsString];
? ? NSURLRequest *request=[NSURLRequest requestWithURL:url];
? ? NSMutableData*data=[[NSMutableData alloc]init];
?? ?
? ? self.connectionData=data;
//? ? [data release];
? ? NSURLConnection *newConnection=[[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];
/**
? ? connection 和conectionData 類型如下:
? ? ?NSURLConnection *connection;
? ? ?NSMutableData *connectionData;
**/
? ? self.connection=newConnection;
? ? if (self.connection!=nil) {
? ? ? ? NSLog(@"成功創(chuàng)建連接");
? ? }else{
? ? ? ? NSLog(@"創(chuàng)建連接失敗");
? ? }??
}
//異步下載代理方法
-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError *)error{
? ? NSLog(@"出錯");
? ? NSLog(@"%@",error);
}
-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData *)data{
? ? NSLog(@"Received data");
? ? [self.connectionData appendData:data];
}
-(void)connectionDidFinishLoading:(NSURLConnection*)connection{
? ? NSLog(@"下載成功");
? ? ? ? //文件保存目錄
? ? ? ? NSString *cachePath=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
? ? ? ? NSLog(@"%@",cachePath);
?? ? ? NSString *filename=[cachePath stringByAppendingPathComponent:@"TravelDemo.plist"];
? ? if ([self.connectionData writeToFile:filename atomically:YES]) {
? ? ? ? NSLog(@"保存成功");
? ? }else{
? ? ? ? NSLog(@"保存失敗");
? ? }
}
補充:
connectionWithRequest需要delegate參數(shù),通過一個delegate來做數(shù)據(jù)的下載以及Request的接受以及連接狀態(tài),此處delegate:self,所以需要本類實現(xiàn)一些方法,并且定義mData做數(shù)據(jù)的接受。
需要實現(xiàn)的方法:
1、獲取返回狀態(tài)、包頭信息。
-?(void)connection:(NSURLConnection?*)connection?didReceiveResponse:(NSURLResponse?*)response;
2、連接失敗,包含失敗。
-?(void)connection:(NSURLConnection?*)connection?didFailWithError:(NSError?*)error;
3、接收數(shù)據(jù)
-?(void)connection:(NSURLConnection?*)connection?didReceiveData:(NSData?*)data;
4、數(shù)據(jù)接收完畢
- (void)connectionDidFinishLoading:(NSURLConnection?*)connection;
? 同步請求數(shù)據(jù)會造成主線程阻塞,通常在請求大數(shù)據(jù)或網(wǎng)絡不暢時不建議使用。
? ? ? ? 從上面的代碼可以看出,不管同步請求還是異步請求,建立通信的步驟基本是一樣的:
? ? ? ? ?1、創(chuàng)建NSURL
? ? ? ? ?2、創(chuàng)建Request對象
? ? ? ? ?3、創(chuàng)建NSURLConnection連接。
? ? ? ? ?NSURLConnection創(chuàng)建成功后,就創(chuàng)建了一個http連接。異步請求和同步請求的區(qū)別是:創(chuàng)建了異步請求,用戶可以做其他的操作,請求會在另一個線程執(zhí)行,通信結果及過程會在回調(diào)函數(shù)中執(zhí)行。同步請求則不同,需要請求結束用戶才能做其他的操作。
?
轉載于:https://www.cnblogs.com/sunshinesl/p/4762516.html
總結
以上是生活随笔為你收集整理的ios自带NSURLConnection下载文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EPSON LQ610K 设置税控盘打印
- 下一篇: linux上docker形式部署GB28