【问题标题】:AFNetworking multipart/form-data POST sends incorrect JSON array of dictionariesAFNetworking multipart/form-data POST 发送不正确的 JSON 字典数组
【发布时间】:2015-09-15 19:13:17
【问题描述】:

我不知道这是一个错误还是我做得不对。

这篇文章看起来非常接近为我解决它,但没有:AFNetworking posts JSON arrays as multiple single-entry dictionaries

我正在尝试发送带有图像的 multipart/form-data POST 并将字典(包含字典数组)传递给“参数”以作为 JSON 发送。

字典:

NSDictionary *parameters = @{@"photos" : @[@{@"photoID":@"0", @"imageURL":@"0", @"imageName":@"0"},
                                           @{@"photoID":@"1", @"imageURL":@"1", @"imageName":@"1"},
                                           @{@"photoID":@"2", @"imageURL":@"2", @"imageName":@"2"}]};

请求:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializer];


[manager POST:@"myURL" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileData:imageData name:@"image" fileName:@"image" mimeType:@"image/png"];

    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Success: %@", responseObject);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];

图像正在发送和接收正常,但是在服务器上接收到的 JSON 如下所示:

{
    photos =     (
                {
            imageName = 0;
        },
                {
            imageURL = 0;
        },
                {
            photoID = 0;
        },
                {
            imageName = 1;
        },
                {
            imageURL = 1;
        },
                {
            photoID = 1;
        },
                {
            imageName = 2;
        },
                {
            imageURL = 2;
        },
                {
            photoID = 2;
        }
    );
}

...多个单项字典的数组 :(

代替:

{
    photos =     (
                {
            imageName = 0;
            imageURL = 0;
            photoID = 0;
        },
                {
            imageName = 1;
            imageURL = 1;
            photoID = 1;
        },
                {
            imageName = 2;
            imageURL = 2;
            photoID = 2;
        }
    );
}

任何帮助都会很棒,谢谢!

【问题讨论】:

    标签: php ios objective-c afnetworking afnetworking-2


    【解决方案1】:

    AFNetworking 中构造多部分请求时,参数以form-data 发送。要在您的多部分响应中发送JSON 编码主体,您需要将它们序列化并将它们附加到多部分响应中,就像您的服务器期望接收它们一样。

    根据您的服务器对它们的期望,您可以使用以下内容:

     NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myJSON options:0 error:nil];
    
     [formData appendPartWithFileData:jsonData name:@"name" fileName:nil mimeType:@"application/json"];
    

    【讨论】:

      【解决方案2】:

      如果您想上传多张图片,并且您希望所有图片的参数名称保持相同,请执行以下操作:

      NSDictionary *parameters = @{@"user_key": @"*****"};
      NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:queryStringss parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
       NSError *error;
      [formData appendPartWithFileData:imageData name:@"photo_file[0]" fileName:@"Picture44.png" mimeType:@"image/png"];
      [formData appendPartWithFileData:imageData1 name:@"photo_file[1]" fileName:@"Picture45.png" mimeType:@"image/png"];
      } error:nil];
      

      通过这种方式,文件将作为数组发送到服务器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        • 1970-01-01
        • 2012-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-08
        相关资源
        最近更新 更多