2015-12-26 2 views
0

Я пытаюсь выполнить простую задачу загрузки изображения на сервер из приложения iOS. Однако после запуска я получаю следующее сообщение об ошибке:Ошибка при загрузке изображения из приложения iOS на сервер

Error: Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

Любая идея, почему? Ниже приведен мой код для клиентской и серверной сторон соответственно.

App сторона код:

-(void) uploadPhoto: (UIImage*) image{ 
    NSString *urlString = @"myServerDNS.com/upload.php"; 

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; 

    NSData *imageData = UIImageJPEGRepresentation(image, 0.8); 
    NSDictionary *parameters = @{@"foo":@"bar"}; 
    [manager POST:urlString 
     parameters:parameters 
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 
    {[formData appendPartWithFormData:imageData name:@"file"];} 
      success:^(AFHTTPRequestOperation *operation, id responseObject) 
    {NSLog(@"Success: %@", responseObject);} 
      failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    {NSLog(@"Error: %@", error);} 
    ]; 
} 

сервера код на стороне PHP:

<?php 
$foo = $_POST["foo"]; 

$target_dir = "Folder/" . basename($_FILES["file"]["name"]); 

if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_dir)) 
{ 
echo json_encode([ 
"Message" => "The file ". basename($_FILES["file"]["name"]). " has been uploaded.", 
"Status" => "OK" 
]); 

} else { 
echo json_encode([ 
"Message" => "Sorry, there was an error uploading your file.", 
"Status" => "Error" 
]); 
} 
?> 
+0

Также добавьте приемлемыеконтинентальные типы: «application/html» и «text/plain». –

+0

Я попытался добавить эти два типа контента и все еще не работал. Как правило, такая ошибка возникает из-за проблемы на стороне клиента или на стороне сервера? Что это за текст JSON, о котором говорит сообщение об ошибке? – Evan

+0

Мое будет сказано, что ваш ответ не в формировании JSON. –

ответ

0

Хорошо, жаль, что я понял, что это была глупая ошибка, причиной проблемы. Это было просто потому, что я добавил echo "hello world"; в начале скрипта php, в результате чего он вызывал текстовую ошибку JSON. Удалено, и сообщение об ошибке исчезло.

Не соответствует сообщению об ошибке, указанному в моем вопросе, но другая ошибка, которая существует в моем коде, заключалась в том, что я использовал appendPartWithFormData вместо appendPartWithFileData. После перехода на второй, загрузка изображения на сервер работает.

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