Impossible d’envoyer des données de formulaire multipart avec AFNetworking 3.0

Actuellement, j’ai essayé d’écrire une méthode dans Objective C qui prend un UIImage et un NSSsortingng et envoie une requête POST à ​​un serveur. Malheureusement, j’ai du mal à le faire envoyer quoi que ce soit. Lorsque j’ai essayé le formulaire avec un formulaire HTML, j’ai pu télécharger avec succès une photo et les parameters. Cependant, je ne peux pas le répliquer dans mon application iOS. Je continue à recevoir une erreur 404 lorsque j’essaie de faire une demande POST.

J’ai essayé deux méthodes différentes d’envoi d’une requête POST de données multiformes selon sa page Github, mais sans succès. J’ai débogué le UIImage dans Xcode et je constate qu’il existe réellement. Je pense que cela a quelque chose à voir avec les parameters que j’envoie. Les parameters doivent-ils faire partie de formDataAppend ou juste comme un dictionnaire comme je l’ai fait ci-dessous?

La partie commentée correspond au tutoriel sur son Github. La section non commentée contient des éléments de la navigation sur Stackoverflow toujours en vain.

+(void) uploadPhotoWithID:(NSSsortingng *)ownerID andPhotoImage:(UIImage *)image andCompletionHandler:(void (^)(MZPhoto *, NSError *))callback{ NSData *imageData = UIImageJPEGRepresentation(image, 1); NSDictionary *parameters = @{@"owner_id": ownerID}; // NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLSsortingng:upload_photo_url parameters:parameters constructingBodyWithBlock:^(id _Nonnull formData) { // [formData appendPartWithFileData:imageData name:@"photo" fileName:@"temp.jpg" mimeType:@"image/jpeg"]; // } error:nil]; // AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; // // NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { // if(error){ // NSLog(@"File Upload Failed"); // // } // else{ // NSLog(@" %@", responseObject); // MZPhoto *photo = [[MZPhoto alloc] initWithDictionary:responseObject error:nil]; // callback(photo, nil); // } // }]; AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithSsortingng:upload_photo_url]]; [manager POST:upload_photo_url parameters:parameters constructingBodyWithBlock:^(id _Nonnull formData) { [formData appendPartWithFileData:imageData name:@"photo" fileName:@"photo.jpg" mimeType:@"image/jpeg"]; } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@" %@", responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@" Failed"); }]; } 

Voici ma fonction Node.JS,

 exports.upload_photo = function(req, res, next) { var owner_id = req.body.owner_id; console.log(owner_id); pg.connect(connectionSsortingng, function(err, client, done) { if (err) { done(); console.log(err); return res.status(500).json({success: false, data: err}); } var query = client.query("INSERT INTO photos (likes, dislikes, user_id) " + "VALUES (0, 0, $1) RETURNING photo_id, likes, dislikes, user_id", [owner_id]); var result; console.log(req.file); query.on('row', function(row) { row.file_url = baseFileURL + row.photo_id + '.jpg'; result = row; }); query.on('end', function() { done(); fs.rename('./static/photos/' + req.file.filename, './static/photos/' + result.photo_id + '.jpg', function(err) { if(err) console.log("Error Renaming the file!"); return res.json(result); }); }); }); console.log("Received photo upload from: " + owner_id); } 

Essayez avec la function suivante

 - (void) postServerRequest:(NSDictionary *)paramDict withData:(NSData*)fileData andType:(uploadType)uploadType Callback:(ResponseBlock) block{ NSSsortingng * strServiceURL = @"Your Webservice URL"; AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.requestSerializer = [AFJSONRequestSerializer serializer]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; [manager.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"]; [manager POST:strServiceURL parameters:paramDict constructingBodyWithBlock:^(id formData) { if (fileData!=nil){ [formData appendPartWithFileData:fileData name:@"Key name on which you will upload file" fileName:@"Image name" mimeType:@"image/jpeg"]; } } success:^(AFHTTPRequestOperation *operation, id responseObject) { DLOG(@"Success: %@", responseObject); block(responseObject,nil); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { DLOG(@"Error: %@", error); block (nil , error); }]; }