iOS開發-NSURLSession檔案上傳

weixin_34236497發表於2016-09-04

一、NSURLSession實現檔案上傳

(1)實現檔案上傳的方法

      /*
     第一個引數:請求物件
     第二個引數:請求體(要上傳的檔案資料)
     block回撥:
     NSData:響應體
     NSURLResponse:響應頭
     NSError:請求的錯誤資訊
     */
    NSURLSessionUploadTask *uploadTask =  [session uploadTaskWithRequest:request 
                                           fromData:data completionHandler:^(NSData * __nullable data, 
                                                                             NSURLResponse * __nullable response, 
                                                                             NSError * __nullable error)

(2)設定代理,在代理方法中監聽檔案上傳進度

/*
 呼叫該方法上傳檔案資料
 如果檔案資料很大,那麼該方法會被呼叫多次
 引數說明:
     totalBytesSent:已經上傳的檔案資料的大小
     totalBytesExpectedToSend:檔案的總大小
 */
-(void)URLSession:(nonnull NSURLSession *)session 
       task:(nonnull NSURLSessionTask *)task 
       didSendBodyData:(int64_t)bytesSent 
       totalBytesSent:(int64_t)totalBytesSent 
       totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend
{
    NSLog(@"%.2f",1.0 * totalBytesSent/totalBytesExpectedToSend);
}

(3)關於NSURLSessionConfiguration相關 (" 具體內容請看 'AFNetworking框架基本使用' 相關介紹! ")

01 作用:可以統一配置NSURLSession,如請求超時等
02 建立的方式和使用
//建立配置的三種方式
+ (NSURLSessionConfiguration *)defaultSessionConfiguration;
+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration;
+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier NS_AVAILABLE(10_10, 8_0);

//統一配置NSURLSession
-(NSURLSession *)session
{
    if (_session == nil) {

        //建立NSURLSessionConfiguration
        NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];

        //設定請求超時為10秒鐘
        config.timeoutIntervalForRequest = 10;

        //在蜂窩網路情況下是否繼續請求(上傳或下載)
        config.allowsCellularAccess = NO;

        _session = [NSURLSession sessionWithConfiguration:config 
                                 delegate:self delegateQueue:[NSOperationQueue mainQueue]];
    }
    return _session;
}

相關文章