我有一个应用程序,在其中我将用户的数据上传到Web服务器上。
我使用下面的代码将数据传递到Web服务器,代码如下。
-(IBAction)btnRegister:(id)sender
{
jsonSP = [SBJSON new];
jsonSP.humanReadable = YES;
NSString *service = @"/register.php";
NSData *imageData = UIImagePNGRepresentation([UIImage imageNamed:@"register_btn.png"]);
[Base64 initialize];
NSString *imageString = [Base64 encode:imageData];
NSLog(@"%@",imageString);
NSString *requestString = [NSString stringWithFormat:@"{'"?username'"='"%@'"&'"user_password'"='"%@'"&'"first_name'"='"%@'"&'"email'"='"%@'"&'"profile_photo_link'"='"%@'"'"}",@"Test",@"Test",@"Test",@"Test@mmm.com",imageString];
NSData *requestData = [NSData dataWithBytes: [requestString UTF8String] length: [requestString length]];
NSString *fileLoc = [[NSBundle mainBundle] pathForResource:@"URLName" ofType:@"plist"];
NSDictionary *fileContents = [[NSDictionary alloc] initWithContentsOfFile:fileLoc];
NSString *urlLoc = [fileContents objectForKey:@"URL"];
urlLoc = [urlLoc stringByAppendingString:service];
NSLog(@"URL : %@",urlLoc);
// urlLoc = [urlLoc stringByAppendingString:@"?username=abcd&password=abcd"];
urlLoc = [urlLoc stringByAppendingString:requestString];
urlLoc = [urlLoc stringByReplacingOccurrencesOfString:@"{" withString:@""];
urlLoc = [urlLoc stringByReplacingOccurrencesOfString:@"}" withString:@""];
urlLoc = [urlLoc stringByReplacingOccurrencesOfString:@"'"" withString:@""];
NSLog(@"URL : %@",urlLoc);
// [fileContents release]; //o_r
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: urlLoc]];
NSString *postLength = [NSString stringWithFormat:@"%d", [requestData length]];
[request setHTTPMethod: @"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody: requestData];
// self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
NSError *respError = nil;
NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: &respError ];
NSLog(@"response is %@",returnData);
// [request release];
if (respError)
{
//[customSpinner hide:YES];
UIAlertView *alt=[[UIAlertView alloc]initWithTitle:@"Internet connection is not Available!" message:@"Check your network connectivity" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[alt show];
//[alt release];
}
else
{
NSString *responseString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];
NSLog(@"response string %@",responseString);
}
}
我能够成功地在没有图像的情况下将数据发送到Web服务器。
但是,如果通过编码Base64上传带有上述代码的图像,则数据不会上传到Web服务器上它在NSLog中给我一个错误,说请求查询字符串太长
我已经导入了Base64.h和.m文件。
我还想传递带有图像的数据。
我该怎么做?
我知道有很多链接,但我想通过这种方式,所以请告诉我我在这里做错了什么?
请帮帮我。
提前谢谢。
Hey Manthan尝试以下代码将UIImage
转换为NSString
,然后将其传递给服务器
UIImage *imgPic =[UIImage imageNamed:@"register_btn.png"];
NSData * imageData = UIImagePNGRepresentation(imgPic);
NSString *base64String = [imageData base64EncodedStringWithOptions:0];
这是一个服务器问题,它告诉您这个错误。
json没有最大长度,但可以发送最大数量的数据。要修复此问题,只需设置.htaccess文件中可以发送的数据量:php_value post_max_size 20M
编辑
此外,如果您有权访问php.ini,您可以在post_max_size
行中更改它
这样尝试;
- (void)addNewItem:(SH_NewItem *)newItem withCompletitionBlock:(void(^)(NSArray *items, NSError *error, NSDictionary *userInfo))completitionBlock
{
AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:[[SH_Shared sharedInstance] getBaseURL]]];
//main cover image...
NSData *imageData = UIImageJPEGRepresentation(newItem.image, JPEG_IMAGE_QUALITY);
NSData *imageData1 = UIImageJPEGRepresentation(newItem.image1, JPEG_IMAGE_QUALITY);
NSData *imageData2 = UIImageJPEGRepresentation(newItem.image2, JPEG_IMAGE_QUALITY);
NSData *imageData3 = UIImageJPEGRepresentation(newItem.image3, JPEG_IMAGE_QUALITY);
NSData *imageData4 = UIImageJPEGRepresentation(newItem.image4, JPEG_IMAGE_QUALITY);
NSDictionary *params = [[NSDictionary alloc]init];
params = [NSDictionary dictionaryWithObjectsAndKeys:
newItem.title, @"title",
newItem.itemDescription, @"description",
[[SH_Shared sharedInstance] token], @"token",
nil];
NSLog(@"params-%@",params);
NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:@"new_item" parameters:params constructingBodyWithBlock: ^(id <AFMultipartFormData> formData) {
if (imageData != nil)
[formData appendPartWithFileData:imageData name:@"images[0]" fileName:@"image_ad.png" mimeType:@"multipart/form-data"];
if (imageData1 != nil)
[formData appendPartWithFileData:imageData1 name:@"images[1]" fileName:@"image_ad1.png" mimeType:@"multipart/form-data"];
if (imageData2 != nil)
[formData appendPartWithFileData:imageData2 name:@"images[2]" fileName:@"image_ad2.png" mimeType:@"multipart/form-data"];
if (imageData3 != nil)
[formData appendPartWithFileData:imageData3 name:@"images[3]" fileName:@"image_ad3.png" mimeType:@"multipart/form-data"];
if (imageData4 != nil)
[formData appendPartWithFileData:imageData4 name:@"images[4]" fileName:@"image_ad4.png" mimeType:@"multipart/form-data"];
}];
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[self getDataWithOperation:op completitionBlock:^(NSData *data, NSError *error, NSDictionary *userInfo) {
CJSONDeserializer *deserializer = [CJSONDeserializer deserializer];
NSError *deserializeError = nil;
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Response: %@", str);
NSDictionary *requestResponseDict = [deserializer deserialize:data error:&deserializeError];
NSString *status = [requestResponseDict valueForKey:kStatus];
BOOL isSuccess = [[status valueForKey:kSuccess] boolValue];
if (isSuccess)
{
// it's OK
}
else
{
// its error
}
}];
}
我使用以下带有多部分表单数据的代码完成了这项工作。
responseData = [NSMutableData data];
NSString *service = @"http:///registerUser.php";
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:service]];
[request setHTTPMethod:@"POST"];
//创建弹性。。。
NSString *boundary = @"---------------------------14737809831466499882746641449";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
//创建后的正文
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"'r'n--%@'r'n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name='"profile_photo_link'"; filename='"ipodfile.png'"'r'n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream'r'n'r'n" dataUsingEncoding:NSUTF8StringEncoding]];
UIImageView *imgvUserImage = [[UIImageView alloc]init];
imgvUserImage.image= [UIImage imageNamed:@"register_btn.png"];
NSData * imageData=[NSData dataWithData:UIImagePNGRepresentation(imgvUserImage.image)];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"'r'n--%@--'r'n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"--%@'r'n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name='"username'"'r'n'r'n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"%@",txtUserName.text] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"'r'n" dataUsingEncoding:NSUTF8StringEncoding]];
//将邮件正文设置为所需
[request setHTTPBody:body];
postconnection=[[NSURLConnection alloc] initWithRequest:request delegate:self];
**对于响应
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[responseData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
[self removeProgressIndicator];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
if (connection == postconnection)
{
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"%@",responseString);
// NSDictionary *deserializedData = [responseString objectFromJSONString];
// NSString *string = [deserializedData objectForKey:@"Status"];
}
}