要上传的图片文件为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做的不对? 求助各位大神....怎么解决