не могу загрузить изображение с помощью Base64 в приложении iphone - PullRequest
2 голосов
/ 08 ноября 2011

Я спрашиваю об этом раньше на этом форуме, но он был закрыт, я не знаю почему, поэтому я снова отправляю свой вопрос. в приложении для iphone я должен загрузить изображение, используя кодировку Base64, но когда я смотрю на сервер, изображение становится белым (размер = 0x0, 54 KO), я уверен, что мой код Base64 моей картинки правильный, потому что PHP скрипт, я использую его, и изображение отображается нормально. Вот php-код, используемый для загрузки:

<?php
$filename = "photo_to_upload.jpg";
$handle = fopen($filename, "r");
$imgbinary = fread($handle, filesize($filename));
$data = base64_encode($imgbinary);
fclose($handle);
?>
<img src="./<?php echo $filename ?>" />
<form action="http://host" method="POST">
<input type="hidden" name="data" value="<?php echo $data?>">
<input type="submit" value="envoyer" />
</form>

и Xcode я использую это:

 NSString *filePath = [[NSBundle mainBundle] pathForResource:@"photo_to_upload" ofType:@"jpg"];
 NSURL *url = [NSURL fileURLWithPath:filePath]; 
 NSData *imageData = [NSData dataWithContentsOfURL:url];

 NSURLResponse* response;
 NSError* error=nil;

NSMutableData *postData=[[NSMutableData alloc]init];
[postData appendData:[@"data=" dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:[self base64forData:imageData]];


NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL   URLWithString:@"HOST"]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];

[[NSURLConnection alloc] initWithRequest:request delegate:self];    

думаю, что вы за любую помощь.

Ответы [ 2 ]

5 голосов
/ 14 января 2013

У меня тоже такая же проблема Красный Мак Ответ Помог мне.

Ответ, который помог

решено !!! на самом деле проблема заключалась в том, что сервер кодировал запрос, заменяя бланк на «+», после чего он декодировал, заменяя «+» на бланк, но в Base64 у нас выделено «+», сервер первого шага ничего не делает (поиск бланка не выполняется) ) но во втором он заменяет "+", и это дает неправильный код base64,

to solve that i replac "+" with ASCII equivalente like this 

:[[self base64forData:imageData]stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"].
0 голосов
/ 08 ноября 2011

Я предполагаю, что ваш postLength, вероятно, неверен (вы не показываете, как он был рассчитан и какой тип).Сделайте это вместо:

[request
    setValue:[NSString stringWithFormat:@"%u", [postData length]] 
    forHTTPHeaderField:@"Content-Length"
];
...