/*
这个其实必须清楚接口的具体参数要求,否则是无法上传成功的;
用请求本地文件url的方式获取文件的data对象和上传文件类型的方法(response.MIMEType),是网上很难找到的,特此记录一下
*/
//同步上传文件
- (BOOL) uplaodFile:(NSString *)filePath toUrl:(NSString *) urlString {
BOOL success = NO;
NSString *fileName = [filePath lastPathComponent];
//获取文件在body中的类型(Content-Type:)
NSURL *fileUrl = [NSURL fileURLWithPath:filePath];
NSURLRequest *tmpRequest = [NSURLRequest requestWithURL:fileUrl];
NSURLResponse *response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:tmpRequest returningResponse:&response error:nil];
/* creating URL request to send data */
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:300];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"ZhongTianHeYue";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
/* adding content as a body to post */
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"type\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"\r\nfile\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
NSString *header = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"imgFile\"; filename=\"%@\"\r\n", fileName];
[body appendData:[header dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Type: %@\r\n\r\n", response.MIMEType] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:data]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[body length]];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
for (NSInteger i = 0; i < _config.connectTimes; i++) {
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//处理发送结果
if (data) {
NSDictionary *dicJson = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
if ([dicJson isKindOfClass:[NSDictionary class]] && [dicJson valueForKey:@"success"]) {
if ([(NSNumber *)[dicJson valueForKey:@"success"] boolValue]) {
success = YES;
break;
}
}
}
}
return success;
}