需要把圖片的數據再request的HTTPBody中配置好
格式
/*
--Boundary+72D4CD655314C423 // 分割符,以“--”開頭,後面的字隨便寫,只要不寫中文即可
Content-Disposition: form-data; name="uploadFile"; filename="001.png" //這裏一定要記住filename = “fghhj.jpg”一定要有擴展名jpg或者別的 這裏註明服務器接收圖片的參數(類似於接收用戶名的userName)及服務器上保存圖片的文件名
Content-Type:image/png // 圖片類型爲png
Content-Transfer-Encoding: binary // 編碼方式
// 這裏是空一行,必不可少!!
... contents of boris.png ... // 圖片數據部分
--Boundary+72D4CD655314C423-- // 分隔符後面以"--"結尾,表明結束
*/
- (void)setMutableRequest:(NSMutableURLRequest *)request WithImage:(UIImage *)image Parameters:(NSDictionary *)paramerters { //構造分界線 boundary NSString *boundary = [NSString stringWithFormat:@"upoad%d%d",arc4random(),arc4random()]; //圖片數據 NSData *imageData = UIImagePNGRepresentation(image);/*(image, 1);*/ /* --Boundary+72D4CD655314C423 // 分割符,以“--”開頭,後面的字隨便寫,只要不寫中文即可 Content-Disposition: form-data; name="uploadFile"; filename="001.png" // 這裏註明服務器接收圖片的參數(類似於接收用戶名的userName)及服務器上保存圖片的文件名 Content-Type:image/png // 圖片類型爲png Content-Transfer-Encoding: binary // 編碼方式 // 這裏是空一行,必不可少!! ... contents of boris.png ... // 圖片數據部分 --Boundary+72D4CD655314C423-- // 分隔符後面以"--"結尾,表明結束 */ //請求頭 NSMutableString *topStr = [NSMutableString string]; //如果有參數,一定要先弄參數的 NSMutableDictionary *mdic = paramerters.mutableCopy; [mdic setObject:[self getUserId] forKey:@"token"]; NSArray *keys = [mdic allKeys]; NSLog(@"%@",keys); for (int i = 0; i < keys.count; i++) { NSString *key = keys[i]; //添加分界線,換行 [topStr appendFormat:@"--%@\r\n",boundary]; //添加字段名稱,換2行 [topStr appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key]; //添加字段的值 [topStr appendFormat:@"%@\r\n",mdic[key]]; } NSLog(@"%@",topStr); // [topStr appendFormat:@"--%@\r\n",boundary]; // [topStr appendFormat:@"Content-Disposition: form-data; name=\"uploadFile\"; filename=\"%@\"\r\n",@"icon"]; // [topStr appendFormat:@"Content-Type:image/jpeg\r\n"]; // [topStr appendFormat:@"Content-Transfer-Encoding: binary\r\n\r\n"]; [topStr appendString:[NSString stringWithFormat:@"--%@\r\n",boundary]]; [topStr appendString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadFile\"; filename=\"%@\"\r\n",@"icon.png"]]; [topStr appendString:[NSString stringWithFormat:@"Content-Type:image/png\r\n"]]; [topStr appendString:[NSString stringWithFormat:@"Content-Transfer-Encoding: binary\r\n\r\n"]]; //拼接數據 NSMutableData *requestBody = [NSMutableData data]; [requestBody appendData:[topStr dataUsingEncoding:NSUTF8StringEncoding]]; [requestBody appendData:imageData]; [requestBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; //結束部分 [requestBody appendData:[[NSString stringWithFormat:@"--%@--",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:requestBody]; [request setValue:[NSString stringWithFormat:@"%zd", requestBody.length] forHTTPHeaderField:@"Content-Length"]; // 設置頭部數據,指定了http post請求的編碼方式爲multipart/form-data(上傳文件必須用這個)。 [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary] forHTTPHeaderField:@"Content-Type"]; }
文件上傳請求數據格式
部分文件的type
AFNetWorking 上傳圖片
- (void)uploadImageWithUrl:(NSString *)url image:(UIImage *)image Parameters:(NSDictionary *)paramerters Success:(SuccessBlock)success ErrorBlock:(ErrorBlock)errorBlock { WS(ws); AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; AFHTTPRequestOperation *op = [manager POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { NSMutableDictionary *mdic = paramerters.mutableCopy; [mdic setObject:[ws getUserId] forKey:@"token"]; //如果有參數 NSArray *keys = [mdic allKeys]; for (int i = 0; i < keys.count; i++) { NSString *key = keys[i]; NSString *content = mdic[key]; NSData *contenData = [content dataUsingEncoding:NSUTF8StringEncoding]; //調用這個方法 [formData appendPartWithFormData:contenData name:key]; } //配置圖片 NSData *imageData = UIImagePNGRepresentation(image); NSDateFormatter *df = [[NSDateFormatter alloc]init]; df.dateFormat = @"YYYYMMddHHmmss"; NSString *fileName = [NSString stringWithFormat:@"%@.png",[df stringFromDate:[NSDate new]]]; [formData appendPartWithFileData:imageData name:@"myfile" fileName:fileName mimeType:@"image/png"]; } success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { if (success) { NSLog(@"%@",responseObject); } } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) { NSLog(@"%@",error); }]; [op start]; }