Обновление веб-сервиса CakePHP с помощью двоичных данных изображений - PullRequest
3 голосов
/ 10 января 2012

У меня есть веб-сервис (который использует CakePHP), в который я успешно отправляю строковые данные с приложением Mac OS X, над которым я работаю.

Изначально мне дали совет, что мне нужно будет создать строку в кодировке Base 64 для передачи PNG-изображения в CakePHP. Поэтому я планировал просто сгенерировать строку в кодировке URL (см. Пример кода ниже). Для этого я включил сторонний класс, который обрабатывает кодирование и декодирование base64.

Однако, похоже, что функция update () CakePHP удаляет некоторые символы из этой строки в кодировке base 64:

Original string may contain something like:
5nd/9ne/+zuPelWPFYtGrRpde2tlK3eXwv/

But the one that is actually stored and eventually retrieved may be:
5nd/9ne/ zuPelWPFYtGrRpde2tlK3eXwv/

Странно, правда? Я работаю над очень ограниченными знаниями о том, как работает CakePHP, поэтому я надеюсь, что это может быть простой ответ. Кажется, что я должен быть в состоянии отправить эту строку в кодировке 64 в CakePHP - и что она должна обновляться без интерпретации / удаления каких-либо символов из кода. Любой совет?

Вот фрагмент кода того, как я публикую свои значения в веб-сервисе CakePHP:

- (void) updateApi {

NSLog(@"Updating user account settings");
NSString* request_url = @"/users/update";

NSLog(@"%@", [NSString stringWithFormat:@"%@%@", @"http://somesite.com", request_url]);
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@%@", @"http://somesite.com", request_url]]];
NSMutableString* post_values = [NSMutableString stringWithFormat:@"data[id]=%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"user_id"]];

[post_values appendFormat:@"&data[company]=%@", [company_field stringValue]];
[post_values appendFormat:@"&data[phone]=%@", [phone_field stringValue]];
[post_values appendFormat:@"&data[address1]=%@", [address1_field stringValue]];
[post_values appendFormat:@"&data[address2]=%@", [address2_field stringValue]];
[post_values appendFormat:@"&data[city]=%@", [city_field stringValue]];
[post_values appendFormat:@"&data[state]=%@", [state_field stringValue]];
[post_values appendFormat:@"&data[zip]=%@", [zip_field stringValue]];
[post_values appendFormat:@"&data[website]=%@", [website_field stringValue]];

// Iteration 09 - Store logo as PNG and prepare to upload to server
NSImage *logoImage = [logo_image image];

if (logoImage) {
    // Image exists; we need to convert it to a BLOB for our back-end database posting
    NSLog(@"Image exists in logo_image");

    // Grab possible representations of this image
    NSArray *representations = [logoImage representations];        
    // Create the PNG data
    NSData *imageData = [NSBitmapImageRep representationOfImageRepsInArray:representations usingType:NSPNGFileType properties:nil];    

    // Base 64 encoding should happen here
    NSString *base64encodedImageData = [imageData base64Encoding];  // Convert to base 64 string
    NSLog(@"\n\nBase 64 image data encoded as \n\n%@\n\n", base64encodedImageData);

    // Store data in parameter
    [post_values appendFormat:@"&data[logo_png_data]=%@", base64encodedImageData];


}

NSString *encoded_post_values = [post_values stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"\n\nEncoded post values string is \n\n%@\n\n", encoded_post_values);

NSData *request_data = [NSData dataWithBytes:[encoded_post_values UTF8String] length:[encoded_post_values length]];

[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[request setHTTPBody:request_data];

NSData* return_data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
//NSLog(@"%@", [[NSString alloc] initWithData:return_data encoding:NSUTF8StringEncoding]);

NSString* result = [[CJSONDeserializer deserializer] deserialize:return_data error:nil];
//NSLog(@"%@", result);

}

1 Ответ

0 голосов
/ 17 января 2014

Это определенно Objective-C преобразование пространства. Это не затронет ничего в кодировке base64.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...