2013-03-08 89 views
0

我使用下面的代码来发送照片到Web服务的附加数据的Web服务:iOS版SDK发布的照片​​与

-(void)uploadPhoto:(UIImage*)image :(NSString*)fileName 
{ 

NSData *img = UIImageJPEGRepresentation(image, 0.9f); 

NSString *urlString = @"http://serverURL.com"; 

NSMutableURLRequest *request= [[NSMutableURLRequest alloc] init]; 
[request setURL:[NSURL URLWithString:urlString]]; 
[request setHTTPMethod:@"POST"]; 

NSString *boundary = @"---------------------------14737809831466499882746641449"; 

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
[request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

NSMutableData *postbody = [NSMutableData data]; 

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

[postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@.jpg\"\r\n",fileName] dataUsingEncoding:NSUTF8StringEncoding]]; 

[postbody appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

[postbody appendData:[NSData dataWithData:img]]; 
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

[request setHTTPBody:postbody]; 

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
NSLog(@"%@", returnString); 

} 

这是工作的罚款,我可以得到从PHP服务器的照片。

我的问题是,是否有可能发送额外的数据与表单数据的服务器?我需要发送更多关于照片的细节,如用户名和其他应用程序相关数据。

我想知道如何将一些额外的数据附加到请求。我试图附加普通的POST数据,但它不工作。我假设是因为数据类型。

我很困惑这是如何工作的,如果有一种方法可以将更多数据附加到请求我发送到服务器。

对此的任何帮助将是伟大的。

谢谢!

+0

你可以使用这个库,它可以用于任何类型的web服务:github.com/mineshpurohit/ServiceCallingUtility – MinuMaster 2014-11-15 06:53:06

回答

1

要在服务器上传图片,最好的方法之一是使用ASIFormDataRequest

您可以使用可替代添加的API相同的参数发送多个值:

 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
[request addPostValue:@"Ben" forKey:@"names"]; 
[request addPostValue:@"George" forKey:@"names"]; 
[request addFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photos"]; 
[request addData:imageData withFileName:@"george.jpg" andContentType:@"image/jpeg" forKey:@"photos"]; 

对于工作代码Uploading file to server using ASIFormDataRequest。如何使用它的一些部分...

 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 

[request setUseKeychainPersistence:YES]; 
//if you have your site secured by .htaccess 

//[request setUsername:@"login"]; 
//[request setPassword:@"password"]; 

NSString *fileName = [NSString stringWithFormat:@"ipodfile%@.jpg",self.fileID]; 
[request addPostValue:fileName forKey:@"name"]; 

想要更好的想法Sending a form POST with ASIFormDataRequest

+0

它看起来像ASIHTTPResquest不再被积极开发([link](http:// allseeing-i。 com/ASIHTTPRequest /)),[AFNetworking](https://github.com/AFNetworking/AFNetworking)似乎是最流行的替代品。 – 2013-03-08 20:34:33

0

只是重复以下线在后每个变量:

[postbody appendData:[@"Content-Disposition: form-data; name=\"userfile\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

[postbody appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

[postbody appendData:[NSData dataWithData:img]]; 
[postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

显然,你需要更新的第一行name值,在第二个内容类型,并在第3的实际数据线。