簡述:服務器
其實使用NSURLSessionDownloadTask
上傳和NSURLConnection原生上傳差很少都是須要拼接,而且也很是麻煩,好了廢話很少說,,直接幹完這篇就去吃晚飯去了。session
代碼:app
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //由於文件比較大 咱們這裏就使用POST了 //一、肯定URL NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/upload"]; //二、肯定請求 由於用POST請求,因此這裏使用NSMutableURLRequest NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; //2.一、 設置請求方式 post request.HTTPMethod = @"POST"; //2.二、請求體個人拼一個會兒........ //request.HTTPBody = ?; //三、 建立NSURLSession NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]]; //建立Task NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromData:data completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]); }]; //執行任務 [task resume]; }
二、這裏的話咱們先看一個圖,這裏我就不介紹它了,由於在NSURLConnection原生上傳裏面有介紹post
三、這裏的拼接和NSURLConnection原生上傳這個裏面同樣,只是換湯不換藥,我就直接上代碼了url
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //由於文件比較大 咱們這裏就使用POST了 //一、肯定URL NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/upload"]; //二、肯定請求 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; /******************************************************************/ // 設置請求頭 [request setValue:@"multipart/form-data; boundary=----WebKitFormBoundaryUFNaH6losNxu4xDq" forHTTPHeaderField:@"Content-Type"]; /******************************************************************/ // 設置請求體 // 設置請求體 // 給請求體加入固定格式數據 這裏也是使用的也是可變的,由於多嘛 NSMutableData *data = [NSMutableData data]; /******************************************************************/ // 開始標記 [data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"Liiii.png\"" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"Content-Type: image/png" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; /******************************************************************/ // 上傳文件參數 //圖片數據 而且轉換爲Data UIImage *image = [UIImage imageNamed:@"Liiii"]; NSData *imagedata = UIImagePNGRepresentation(image); [data appendData:imagedata]; [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; /******************************************************************/ // 非文件參數 [data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"Content-Disposition: form-data; name=\"username\"" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"LitterL" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; /******************************************************************/ // 添加結束標記 [data appendData:[@"------WebKitFormBoundaryUFNaH6losNxu4xDq--" dataUsingEncoding:NSUTF8StringEncoding]]; [data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; /******************************************************************/ //請求方式 request.HTTPMethod = @"POST"; //請求體 request.HTTPBody = data; //三、 建立NSURLSession NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]]; //建立Task NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromData:data completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]); }]; //執行任務 [task resume]; }
(NSURLSessionTaskDelegate)
中能實時獲取它上傳 的進度,而且很是方便/* 只要給服務器上傳數據就會調用 (一次或屢次) bytesSent: 當前這一次發送的數據長度 totalBytesSent: 總共已經發送的數據長度 totalBytesExpectedToSend: 須要上傳的文件的總大小 */ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSendBodyData:(int64_t)bytesSent totalBytesSent:(int64_t)totalBytesSent totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend { NSLog(@"%f", 1.0 * totalBytesSent / totalBytesExpectedToSend); } /* 判斷是否上傳成功,若是失敗error是具備值 */ - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { NSLog(@"%s, %@", __func__, error); }
結束代理
本章到此結束 歡迎各位碼友隨意轉載並指正