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做的不对? 求助各位大神....怎么解决

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

楼主,这个问题最后是怎么解决的呀