POST jpeg upload with AFNetworking
NSData* sendData = [self.fileName.text dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary *sendDictionary = [NSDictionary dictionaryWithObject:sendData forKey:@"name"]; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:remoteUrl]; NSMutableURLRequest *afRequest = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/photos" parameters:sendDictionary constructingBodyWithBlock:^(id <AFMultipartFormData>formData) { [formData appendPartWithFileData:photoImageData name:self.fileName.text fileName:filePath mimeType:@"image/jpeg"]; } ]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest]; [operation setUploadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) { NSLog(@"Sent %d of %d bytes", totalBytesWritten, totalBytesExpectedToWrite); }]; [operation setCompletionBlock:^{ NSLog(@"%@", operation.responseString); //Gives a very scary warning }]; [operation start];
+ (NSDictionary*)parametersOfUser:(User*)user{ if (user) { NSMutableDictionary *returnDict = [NSMutableDictionary dictionaryWithCapacity:0]; if (user.userId && [user.userId length]) { [returnDict setObject:[user.userId urlEncoded] forKey:@"userId"]; } if (user.userName && [user.userName length]) { [returnDict setObject:[user.userName urlEncoded] forKey:@"userName"]; } if (user.phone && [user.phone length]) { [returnDict setObject:[user.phone urlEncoded] forKey:@"phone"]; } if (user.email && [user.email length]) { [returnDict setObject:[user.email urlEncoded] forKey:@"email"]; } [returnDict setObject:[user.deviceId urlEncoded] forKey:@"deviceId"]; [returnDict setObject:[user.deviceType urlEncoded] forKey:@"deviceType"]; [returnDict setObject:[user.osName urlEncoded] forKey:@"osName"]; [returnDict setObject:[user.osVersion urlEncoded] forKey:@"osVersion"]; if (user.pinCodeHash && [user.pinCodeHash length]) { [returnDict setObject:[user.pinCodeHash urlEncoded] forKey:@"pinCodeHash"]; } if (user.publicKey && [user.publicKey length]) { [returnDict setObject:[user.publicKey urlEncoded] forKey:@"publicKey"]; } return returnDict; }return nil; }
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL]; NSMutableURLRequest *afRequest = [client multipartFormRequestWithMethod:@"POST" path:path parameters:[User parametersOfUser:user] constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { /** *@discussion If we use multipart, we should only have two parts, one for picture (probably type is image/png) and one for other parameters (type is x-www-form-urlencoded) */ //header /* NSString *bodyString = [User postBodyStringWithUser:user withPostType:PostTypeMultiPart]; NSMutableDictionary *headers = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"application/x-www-form-urlencoded; charset=UTF-8",@"Content-Type", [NSString stringWithFormat:@"form-data; name=\"%@\"", @"usr_info"],@"Content-Disposition" , nil]; [formData appendPartWithHeaders:headers body:[bodyString dataUsingEncoding:NSUTF8StringEncoding]]; */ //picture part if (user.picture2) { NSData *data = UIImagePNGRepresentation(user.picture2); //NSLog(@"=====data length is %i",[data length]); [formData appendPartWithFileData:data name:@"picture2" fileName:nil mimeType:@"image/*"]; } }];
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix