2014-01-06 2 views
2

Описание моей проблемы на самом деле находится в вопросе заголовка. Я новичок в веб-технологиях, поэтому это поведение для меня немного поразительно. Почему вызывается блок отказов, хотя загрузка изображений завершена с успехом? Более того, я искал ответ на свой вопрос о SoF и применил некоторые решения, но эта ошибка все еще появляется. Пожалуйста, помогите, если это возможно. Заранее спасибо.AFNetworking 2.0 Ошибка POST + PHP, хотя загрузка выполнена успешно

ЦЕЛЬ - C:

- (void)upload { 

    NSString *fileName = [NSString stringWithFormat:@"%ld%c%c.jpg", (long)[[NSDate date] timeIntervalSince1970], arc4random_uniform(26) + 'a', arc4random_uniform(26) + 'a']; 
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpg"]; 
    NSData *data = UIImagePNGRepresentation([UIImage imageWithContentsOfFile:imagePath]); 

    NSString *URLString = @"http://myServer/myAppFolder"; 

    AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager manager] initWithBaseURL:[NSURL URLWithString:URLString]]; 

    AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; 
    [manager setResponseSerializer:responseSerializer]; 
    [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObject:@"text/html"]]; 

    AFHTTPRequestOperation *operation = [manager POST:@"upload.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
     [formData appendPartWithFileData:data name:@"uploadedfile" fileName:fileName mimeType:@"image/jpeg"]; 
    } success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSLog(@"Success %@", responseObject); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Failure/%@,/%@", error, operation.responseString); //error comes from here 
    }]; 

    [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { 
     NSLog(@"uploading..."); 
    }]; 
} 

upload.php:

<?php 
$filename="uploaded"; 
$target_path = "uploads/"; 

$target_path = $target_path . basename($_FILES['uploadedfile']['name']); 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
    echo "The file ". basename($_FILES['uploadedfile']['name'])." has been uploaded"; 
} else { 
    echo "There was an error uploading the file, please try again!"; 
} 
?>; 

Я получаю эту ошибку:

Failure/Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x8a633e0 {NSDebugDescription=Invalid value around character 0.},/The file 1389046572lb.jpg has been uploaded; 
+0

Не кодировщик ios, но «Недопустимое значение вокруг символа 0» для вашего сообщения «Файл ...» предполагает, что какао ожидает какой-то другой текст, который вы не отправляете. –

+0

Почему вы используете 'AFJSONResponseSerializer'? Ваш PHP не возвращает JSON ... Попробуйте с помощью '[AFResponseSerializer serializer]' ... –

+1

Я попытался воспроизвести JSON, сделанный json_encode в моем .php-файле. Но в конце появилась ошибка об мусоре. Я понял, что в сериализаторе может быть проблема, хотя и не знал об AFHTTPResponseSerializer, который на самом деле является ответом. Спасибо rokjarc за осуждение меня! Также спасибо Marc за ответ :-) – Neru

ответ

1

Это кажется, что проблема заключается в том, что вы используете AFJSONResponseSerializer для сериализации ответа на скрипт загрузки PHP.

И ваш PHP не возвращает JSON, поэтому сериализатор вызывает ошибку.

Вы можете изменить PHP-скрипт так, чтобы он возвращал результат в формате JSON. Или вы можете использовать различный тип сериализатора.

В соответствии с решением this forum было бы использовать [AFResponseSerializer serializer] - я не уверен, что он существует. Попробуйте basic AFHTTPResponseSerializer.

Смежные вопросы