如何在 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 文本键