У меня есть приложение, в котором я загружаю данные пользователя на веб-сервер.
Я использую приведенный ниже код для передачи данных на веб-сервер с кодом ниже.
-(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",@"[email protected]",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);
}
}
Я успешно могу отправить данные на веб-сервер без изображения.
Но если загрузить изображение с кодом, показанным выше, кодируя Base64, данные не будут загружены на веб-сервер. Это дает мне ошибку в NSLog, говоря, что строка запроса слишком длинная.
Я уже импортировал файлы Base64.h и .m.
Я хочу также передать данные с изображением.
Как я могу это сделать?
Я знаю, что есть много ссылок, но я хочу передать это таким образом, поэтому, пожалуйста, скажите мне, что не так, я делаю здесь?
Пожалуйста, помогите мне.
Заранее спасибо.
Эй, Мантан Попробуйте этот приведенный ниже код для преобразования 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"];}
}