POST单文件上传
1.單個(gè)文件上傳(四個(gè)步驟) 2.設(shè)置請(qǐng)求體格式
{
? ? 為什么要上傳文件:
?? ?
? ? - 以前很多服務(wù)器對(duì)上傳文件的大小有限制,PHP 限制是 2M
? ? - 目前很多服務(wù)器不僅不限制大小,而且鼓勵(lì)上傳多個(gè)文件!
? ? - 云服務(wù)器的普及!
? ? - 軟件商希望獲得更多的用戶(hù)數(shù)據(jù)!
?? ?
? ? 提示:abc 的目錄是用來(lái)保存上傳文件的,需要設(shè)置訪問(wèn)權(quán)限!
?? ?
? ? <1> 文件上傳使用 POST 方法.
?? ?
? ? // 請(qǐng)求為可變請(qǐng)求
? ? NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
? ? // 制定請(qǐng)求方法為 POST
? ? request.HTTPMethod = @"POST";
?? ?
? ? <2> 設(shè)置請(qǐng)求頭,告訴服務(wù)器請(qǐng)求體中的內(nèi)容包含文件參數(shù).
? ? [request setValue:@"multipart/form-data; boundary=kBoundary" forHTTPHeaderField:@"Content-Type"];
?? ?
? ? <3> 設(shè)置請(qǐng)求體(注意:必須嚴(yán)格按照格式設(shè)置).
? ? {
? ? ? ? // 上邊界
? ? ? ? --boundary\r\n
? ? ? ? Content-Disposition: form-data; name=userfile; filename=555\r\n
? ? ? ? Content-Type: application/json\r\n\r\n
?? ? ? ?
?? ? ? ?
? ? ? ? 文件內(nèi)容的二進(jìn)制數(shù)據(jù)
?? ? ? ?
? ? ? ? // 下邊界
? ? ? ? \r\n--boundary--
?? ? ? ?
?? ? ? ?
? ? ? ? 注意1:請(qǐng)求體內(nèi)容分為三個(gè)部分:
?? ? ? ?
? ? ? ? * 上邊界部分,告訴服務(wù)器要做數(shù)據(jù)上傳,包含了服務(wù)器的接收字段name=userfile,文件在服務(wù)器中保存的名稱(chēng)filename=555,以及上傳文件的數(shù)據(jù)類(lèi)型 application/json(需要嚴(yán)格按照字符串格式來(lái)設(shè)置)
?? ? ? ?
? ? ? ? * 上傳文件的數(shù)據(jù)部分(二進(jìn)制數(shù)據(jù))
?? ? ? ?
? ? ? ? * 下邊界部分,嚴(yán)格按照字符串格式來(lái)設(shè)置.
?? ? ? ?
? ? ? ? 上邊界部分和下邊界部分的字符串,最后都要轉(zhuǎn)換成二進(jìn)制數(shù)據(jù),和文件部分的二進(jìn)制數(shù)據(jù)拼接在一起,作為請(qǐng)求體發(fā)送給服務(wù)器.
?? ? ? ?
?? ? ? ?
? ? ? ? 注意2:
?? ?
? ? ? ? * userfile => 負(fù)責(zé)上傳文件腳本中的 字段名,開(kāi)發(fā)的時(shí)候,可以咨詢(xún)后端程序員
? ? ? ? * filename => 將文件保存在服務(wù)器上的文件名稱(chēng)
? ? ? ? * Content-Type: 客戶(hù)端告訴服務(wù)器上傳文件的文件類(lèi)型
?? ? ? ?
? ? ? ? 注意3:
?? ? ? ?
? ? ? ? * 每一行末尾需要有一定的 \r\n
? ? ? ? * 提示:有些服務(wù)器可以直接使用 \n,但是新浪微博如果使用 \n 上傳文件,服務(wù)器會(huì)返回“沒(méi)有權(quán)限”的錯(cuò)誤!
?? ? ? ?
? ? }
?? ?
? ? <4> 發(fā)送請(qǐng)求(用 NSURLConnection異步發(fā)送請(qǐng)求)
? ? [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
? ? ? ? //
? ? ? ? NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
?? ? ? ?
? ? ? ? NSLog(@"%@",string);
? ? }];
?? ?
}
轉(zhuǎn)載于:https://www.cnblogs.com/xhc1263478959/p/4809267.html
總結(jié)
- 上一篇: recv死循环
- 下一篇: jQuery的无new构建