_AK47 2016-05-16 12:18 采纳率: 0%
浏览 1968

NSURLSession上传图片 Failed to decode Multipart body

要上传的图片文件为data,name:@"facebyte",filename:@"facebyte",mimeType:@"image/jpeg"
核心代码如下:

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:aUrl]];
    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
    NSString *boundary = [NSString stringWithFormat:@"Boundary+%@", [[NSUUID UUID] UUIDString]];
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
    [request setValue:contentType forHTTPHeaderField: @"Content-Type"];
    [request setHTTPMethod:@"POST"];
    NSData *httpBody = [self createBodyWithParameters:params
                                                         data:data
                                                     mimeType:@"image/jpeg"
                                                         name:@"facebyte"
                                                     finename:@"facebyte"];
    NSURLSession *uploadSession = [NSURLSession sharedSession];  
     NSURLSessionTask *task = [uploadSession uploadTaskWithRequest:request fromData:httpBody completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
     ....
    }];
    [task resume];

+ (NSData *)createBodyWithParameters:(NSDictionary *)parameters
                                data:(NSData *)data
                            mimeType:(NSString *)mimeType
                                name:(NSString *)name
                            finename:(NSString *)fileName
{
    NSMutableData *httpBody = [NSMutableData data];
    NSString *boundary = [NSString stringWithFormat:@"Boundary+%@", [[NSUUID UUID] UUIDString]];

    // add params (all params are strings)

    [parameters enumerateKeysAndObjectsUsingBlock:^(NSString *parameterKey, NSString *parameterValue, BOOL *stop) {
        [httpBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [httpBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", parameterKey] dataUsingEncoding:NSUTF8StringEncoding]];
        [httpBody appendData:[[NSString stringWithFormat:@"%@\r\n", parameterValue] dataUsingEncoding:NSUTF8StringEncoding]];
    }];

    // add image data
    [httpBody appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [httpBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", name, fileName] dataUsingEncoding:NSUTF8StringEncoding]];
    [httpBody appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", mimeType] dataUsingEncoding:NSUTF8StringEncoding]];
    [httpBody appendData:data];
    [httpBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

    [httpBody appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

    return httpBody;
}

最后请求发出后,用Charles抓包发现Request中的Multipart标签中显示Failed to decode Multipart body,怀疑应该是boundary做的不对? 求助各位大神....怎么解决

  • 写回答

2条回答 默认 最新

  • threenewbee 2016-05-16 14:21
    关注

    Boundary是不管的,关键是你文件的正文base64编码是不是有问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记