NSURLSession實現(xiàn)文件上傳
1)確定請求路徑
(2)根據(jù)URL創(chuàng)建一個可變的請求對象
(3)設(shè)置請求對象甩卓,修改請求方式為POST
(4)設(shè)置請求頭,告訴服務(wù)器我們將要上傳文件(Content-Type)
(5)拼接要上傳的數(shù)據(jù)體(在請求體中按照既定的格式拼接要上傳的文件參數(shù)和非文件參數(shù)等數(shù)據(jù))
001 拼接文件參數(shù)
002 拼接非文件參數(shù)
003 添加結(jié)尾標(biāo)記
(6)發(fā)送請求上傳文件
(7)解析服務(wù)器返回的數(shù)據(jù)
//請求體拼接格式
//分隔符:----WebKitFormBoundaryhBDKBUWBHnAgvz9c
//01.文件參數(shù)拼接格式
--分隔符
Content-Disposition:參數(shù)
Content-Type:參數(shù)
空行
文件參數(shù)
//02.非文件拼接參數(shù)
--分隔符
Content-Disposition:參數(shù)
空行
非文件的二進制數(shù)據(jù)
//03.結(jié)尾標(biāo)識
--分隔符--
- 使用NSURLSession上傳文件的代碼
/*
第一個參數(shù):請求對象
第二個參數(shù):請求體(要上傳的文件數(shù)據(jù))
block回調(diào):
NSData:響應(yīng)體
NSURLResponse:響應(yīng)頭
NSError:請求的錯誤信息
*/
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromData:data completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error)
- 可以設(shè)置代理,在代理方法中監(jiān)聽上傳進度
/*
調(diào)用該方法上傳文件數(shù)據(jù)
如果文件數(shù)據(jù)很大,那么該方法會被調(diào)用多次
參數(shù)說明:
totalBytesSent:已經(jīng)上傳的文件數(shù)據(jù)的大小
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);
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者