iPhone使用AFNetworking上传多部分文件

在我的iOS应用程序中,我想使用NSMutableURLRequest为多部分文件使用java API上传文件。 这里是显示参数的forms。

  <form action="API_URL" encType='multipart/form-data' method=post> <input type=file name="files"> <input type=submit value="Upload Attempt Files"> 

编辑form2

  <form action='URL' method="post" encType='multipart/form-data'> <input name="key1" value='123'> <input name="key2" value='asdf'> <input name="key3" value='qwerty'> <input name="key4" value='aaa'> <input name="key5" value='aaa'> <input name="key6" value='false'> <input type="file" name="files"> <input type=submit value="Create Forum Posts"> </form> 

我怎样才能做到这一点。

这里的这个问题展示了如何在iOS中使用AFNetworking (目标c)上传多部分文件。 但我没有得到如何把参数按照我使用的forms。

请帮助和build议

看看你的HTML,你的<input type=file>namefiles ,因此你可以使用@"files"作为appendPartWithFileData方法的name参数。 例如,使用AFNetworking 3.x :

 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager POST:urlString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileData:imageData name:@"files" fileName:photoName mimeType:@"image/jpeg"]; [formData appendPartWithFormData:[key1 dataUsingEncoding:NSUTF8StringEncoding] name:@"key1"]; [formData appendPartWithFormData:[key2 dataUsingEncoding:NSUTF8StringEncoding] name:@"key2"]; // etc. } progress:nil success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"Response: %@", responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"Error: %@", error); }]; 

(对于AFNetworking 1.x和2.x语法,请参阅此答案的修订历史。)

 -(void) makePhotoUploadRequest{ NSArray *keys = [[NSArray alloc]initWithObjects:@"UserID", @"CompanyName" ,@"Location",@"Latitude",@"Longitude",@"Tagline",@"Goals",@"ColorName",nil]; NSArray *values =[[NSArray alloc]initWithObjects:@"103",@"queppelin",@"Jaiur",@"11.3" ,@"12.3",@"Let's do it",@"Let's do it",@"Let's do it", nil]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; NSURL *baseUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@/%@/RegisterCompanyUser",serverRequest,serverPort,serverName]]; NSString *charset = (NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding)); [request setURL:baseUrl]; [request setHTTPMethod:@"POST"]; NSString *boundary = @"0xKhTmLbOuNdArY"; NSString *endBoundary = [NSString stringWithFormat:@"\r\n--%@\r\n", boundary]; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; charset=%@; boundary=%@", charset, boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; NSMutableData *tempPostData = [NSMutableData data]; [tempPostData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; for(int i=0;i<keys.count;i++){ NSString *str = values[i]; NSString *key =keys[i]; NSLog(@"Key Value pair: %@-%@",key,str); [tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; [tempPostData appendData:[str dataUsingEncoding:NSUTF8StringEncoding]]; // [tempPostData appendData:[@"\r\n--%@\r\n",boundary dataUsingEncoding:NSUTF8StringEncoding]]; [tempPostData appendData:[endBoundary dataUsingEncoding:NSUTF8StringEncoding]]; } // Sample file to send as data [tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"Image\"; filename=\"%@\"\r\n", @"company-logo.png"] dataUsingEncoding:NSUTF8StringEncoding]]; [tempPostData appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; UIImage *myImageObj = [UIImage imageNamed:@"company-logo.png"]; NSData *mydata= UIImagePNGRepresentation(myImageObj); NSLog(@"Image data:%d",mydata.length); [tempPostData appendData:mydata]; [tempPostData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [request setHTTPBody:tempPostData]; NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; if( theConnection ) { dataWebService = [NSMutableData data] ; NSLog(@"request uploading successful"); } else { NSLog(@"theConnection is NULL"); } }