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