如何在 iOS 中使用 NSDictionary 添加图像并使用 POST 方法将数组列表发送到服务器
Posted
技术标签:
【中文标题】如何在 iOS 中使用 NSDictionary 添加图像并使用 POST 方法将数组列表发送到服务器【英文标题】:How to add Image with a NSDictionary and send the List of Array to server using POST method in iOS 【发布时间】:2016-05-04 07:03:48 【问题描述】:我正在做一个项目,我需要将多个 NSDictionary
对象添加到 NSArray
中,并且需要使用 POST 请求将 NSArray
发送到服务器。为此,我使用 AFNetworking
框架。好吧,直到我遇到发送 Image's
与数组中的对象的要求之前,一切都很好。
我尝试以base64
字符串形式发送图像数据,但这里的问题是,当我尝试发送数据时,这要么需要很多时间,要么会超时并且连接失败。好吧,我尝试使用其他方式压缩图像并发送它,但这里UIImage
质量受到影响。所以任何人都可以帮助我以正确的方式做到这一点。
提前致谢!
【问题讨论】:
【参考方案1】: NSData *imagedata = UIImagePNGRepresentation(_imgaddcontact.image);
NSString *base64 = [imagedata base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
NSMutableDictionary *parameterdiction = [NSMutableDictionary dictionary];
[parameterdiction setObject:base64 forKey:@"Photo"];
AFHTTPRequestOperation *op = [manager POST:@"<URL>" parameters:parameterdiction constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
if(imagedata != nil)
[formData appendPartWithFileData:imagedata name:@"Photo" fileName:@"image.png" mimeType:@"image/png"];
【讨论】:
感谢您的输入,这里我必须发送一个对象数组。而不是单个对象,当我发送单个对象时,它工作得很好,但是当我尝试发送对象数组和包括图像列表的数组时,这给了我超时问题。我想在 NSArray 中发送所有带有图像的 NSDictionary 对象,并将这个数组发送到服务器。@purushothaman 在上面的答案中,我们只能发送一个对象而不是对象列表。再次感谢您的帮助,并且可以请告诉我如何发送包含图像的 NSArray 对象。 请问您有解决方案吗【参考方案2】:您应该使用AFNetworking
。将您的库拖放到您的项目中并在您的班级中导入AFNetworking.h
,然后您可以执行以下操作,
// This request only depends on afnetworking
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:imageUploadUrl parameters:tempDict constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
// retrieve image by any way in my case below in your case whatever
UIImageView *tempImageView = (UIImageView*)[self.view viewWithTag:imageViewBaseTag+i];
UIImage *img = tempImageView.image;
NSData *imgData = UIImageJPEGRepresentation(img, 0.5); //convert image to data to send
[formData appendPartWithFileData:imgData name:[imageNameArray objectAtIndex:i] fileName:[imageNameArray objectAtIndex:i] mimeType:@"image/jpeg"]; // append image data to formdata to send server
error:nil];
// This part is not depend on AFnetworking
NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error)
// handle your response here. you get respose in data parameter convert it in appropriate format like json or string and you can handle error also if occured
]resume];
希望这会有所帮助:)
【讨论】:
感谢您的输入,这里我必须发送一个对象数组。而不是 NSDictionary 的单个对象。 那么您可以在parameters
中传递该对象数组而不是tempDict
NSData *imgData = UIImageJPEGRepresentation(img, 0.5);正在降低图像质量。我们不能发送原始图像吗?
如果你也想发送多张图片,那么你可以在块内使用 for 循环。不要混合这两种东西。参数不同,图像不同
我已经从我的 for 循环中发布了这段代码,所以它就是这样。您应该根据需要进行管理以上是关于如何在 iOS 中使用 NSDictionary 添加图像并使用 POST 方法将数组列表发送到服务器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中正确地将 NSDictionary 转换为 json 格式?
在 Push for Segue [IOS] 中获取 NSDictionary 选定行
如何在 iOS 中为 TTTAttributedLabel LinkAttributes 添加 NSDictionary UIColor
iOS 使用 NSDictionary 将数据加载到部分和行中
如何在序列化为 json 之前将 NSDictionary 添加到另一个 NSDictionary
UIActivityTypePostToFacebook 如何发布图像和文本 xcode ios NSDictionary 文本键