2015-11-06 1 views
2

J'ai essayé de trouver une solution à ce problème, je n'ai rien trouvé dans node.js/express. js et iOS app. Mon client a l'obligation de ne pas utiliser de bibliothèque tierce. Donc, je n'utilise pas AFNetworking. Toute aide ou si quelqu'un peut juste dire pourquoi l'erreur arrive serait grandement appréciée. Je suis en train d'envoyer des données de formulaire en plusieurs parties, image avec du texte. Chaque fois que je fais POST, je reçois une erreur: Fin inattendue des données multi-parties.Erreur: Fin inattendue des données multi-parties] storageErrors: [] dans l'application express.js-iOS (Objective-C)

code POST dans iOS:

NSURL *url = [NSURL URLWithString:@"http://172.16.0.5:8080/upload"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
    [request setHTTPMethod:@"POST"]; 

    NSString *boundary = @"YOUR_BOUNDARY_STRING"; 
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
    [request addValue:contentType forHTTPHeaderField:@"Content-Type"]; 

    NSMutableData *body = [NSMutableData data]; 

    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"photo\"; filename=\"%@.jpg\"\r\n", self.path] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[NSData dataWithData:self.imageData]]; 

    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"message\"\r\n\r\n%@", self.mealTitleTextField.text] dataUsingEncoding:NSUTF8StringEncoding]]; 

    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"user\"\r\n\r\n%d", 1] dataUsingEncoding:NSUTF8StringEncoding]]; 

    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

    [request setHTTPBody:body]; 

    NSURLResponse *response; 
    NSError *error; 

    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

Voilà comment je reçois le chemin du fichier d'image:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                 NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    self.path = [documentsDirectory stringByAppendingPathComponent: 
         @"test.png" ]; 
    self.imageData = UIImagePNGRepresentation(image); 
    [self.imageData writeToFile:self.path atomically:YES]; 

Voici le code du serveur:

router.post('/upload', function(req,res,next){ 
    upload.single('photo')(req, res, function(err){ 
     if (err) { 
      console.log(err) 
      res.send(err); 
      return; 
     } 

     console.log(req.file); 
     res.json({'ok':'ok'}); 
    }); 
});`` 

Répondre