Uploader une image sur un serveur

RafaJacksonRafaJackson Membre
octobre 2014 modifié dans API UIKit #1

Bonjour à  tous,


je développe actuellement une application iOS qui permet entre autre d'envoyer une image sur un serveur. J'ai donc pour cela recours à  AFNetworking. 


Je récupère soit de la librairie photo, soit de l'appareil un photo pour l'envoyer sur un serveur. 


Voici mon code iOS : 



NSData *imageData = UIImageJPEGRepresentation(imageAUpload, 90);

AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer];

NSDictionary *parameters = @{@Pseudo: PseudoUtilisateur};

NSError *__autoreleasing* error;
NSMutableURLRequest *request = [serializer multipartFormRequestWithMethod:@POST URLString:@http://blablabla.com/uploader.php parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData
name:@userfile
fileName:@image.jpg
mimeType:@image/jpg];
} error:(NSError *__autoreleasing *)error];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFHTTPRequestOperation *operation =
[manager HTTPRequestOperationWithRequest:request
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@Success %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@Failure %@", error.description);
}];
operation.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@application/json];

[operation start];

Voici mon code PHP : 



<?php
$uploaddir = './'; //Uploading to same directory as PHP file
$file = basename($_FILES['userfile']['name']);
$uploadFile = $file;
$randomNumber = rand(0, 99999);
$newName = $uploadDir . $randomNumber . $uploadFile;

if (is_uploaded_file($_FILES['userfile']['tmp_name']))
{
echo json_encode("Fichier uploadé");
}
else
{
echo json_encode("Fichier non uploadé");
}

if ($_FILES['userfile']['size']> 300000)
{
echo json_encode("Votre fichier est trop lourd.");
}

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $newName))
{
echo json_encode ("Fichier déplacé dans répertoire avec succès.") ;
}
?>

Voici l'erreur que l'on m'affiche : 



Failure Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn't be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=0x8ed3f00 {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

J'avais déjà  essayé à  l'aide des NSURLConnection mais rien ne se passe. 


 


Merci d'avance


Réponses

  • AliGatorAliGator Membre, Modérateur
    Bah regarde ce que ton serveur re renvoies comme contenu brut, d'après l'erreur le JSON retourné n'est pas valide, sans doute que tu as de la pollution au début, des espaces ou sauts de ligne en trop par exemple peut-être...
  • Désolé de mon ignorance :)


    Mais comment est-ce que je fais je n'arrive pas à  afficher le contenu brut renvoyé par le serveur :(


  • AliGatorAliGator Membre, Modérateur
    octobre 2014 modifié #4
    Regarde plus en détail le contenu de la NSError et de son userInfo, met des Breakpoints et remonte la callstack, etc... bref debug un peu ;)



    De plus si tu avais mis ta question dans le bon forum au lieu de la mettre n'importe où tu aurais sans doute + de chances d'avoir des réponses... j'ai déplacé ton post mais la prochaine fois fait un peu attention
  • Personnellement j'utilise un soft "Charles proxy" qui permet de "traquer" les requêtes réseaux, c'est un logiciel assez connu, il t'affiche les données envoyée et reçu par ton mac. Par défaut il marche avec le simulateur évidemment mais y a moyen de paramétrer le proxy de tes device pour qu'ils passent pas le logiciel.


     


    Ce logiciel est payant (quelque chose comme 50euro il me semble) sinon tu as une version d'évaluation qui coupe toutes les 30 min et qui met quelque chose comme 10 seconde pour démarrer. Personnellement je l'ai acheter ça fait un peu de frais mais je trouve ça vraiment pratique.


     


    Bon courage pour la suite.


Connectez-vous ou Inscrivez-vous pour répondre.