Je veux envoyer une demande de publication, mais j'ai besoin d'envoyer plusieurs fichiers, comment faire cela?Comment envoyer plusieurs fichiers avec demande de publication? (objectif-c, iOS)
TNX
Je veux envoyer une demande de publication, mais j'ai besoin d'envoyer plusieurs fichiers, comment faire cela?Comment envoyer plusieurs fichiers avec demande de publication? (objectif-c, iOS)
TNX
Utilisez l'une des nombreuses ressources sur la façon de configurer un NSMutableURLRequest
pour les données POSTer. L'en-tête Content-Type doit être "multipart/form-data", et chaque fichier sera concaténé à son tour avec un en-tête de pièce approprié. RFC2388 est la norme pertinente.
Vous devez créer des limites pour les différentes images à télécharger. Laissez-moi vous expliquer étape par étape. 1. Convertissez vos images en NSData et ajoutez-les au dictionnaire.
UIImage *image1 = [UIImage imageNamed:@"imageName"];
UIImage *image2 = [UIImage imageNamed:@"imageName"];
UIImage *image3 = [UIImage imageNamed:@"imageName"];
NSMutableDictionary *imageDataDictionary = [[NSMutableDictionary alloc] init];
[imageDataDictionary setObject:UIImagePNGRepresentation(image1) forKey:@"image"];
[imageDataDictionary setObject:UIImagePNGRepresentation(image2) forKey:@"image"];
[imageDataDictionary setObject:UIImagePNGRepresentation(image3) forKey:@"image"];
Lorsque vous avez créé le dictionnaire ci-dessus son temps pour créer une partie du corps de la demande.
NSMUtableData *finalPostData = [[NSMutableData alloc] init];
NSString *boundary = @"0xKhTmLbOuNdArY";
NSString *endBoundary = [NSString stringWithFormat:@"\r\n--%@\r\n", boundary];
[finalPostData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
for(NSString *key in imageDataDictionary)
{
imageData = [imageDataDictionary objectForKey:key];
[finalPostData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[finalPostData appendData:[@"Content-Disposition: form-data; name=\"upload\"; filename=\"image.png\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[finalPostData appendData:[@"Content-Type: image/png\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[finalPostData appendData:[NSData dataWithData:imageData]];
[finalPostData appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
}
Lorsque toutes les images sont ajoutées. Nous devons terminer avec la limite finale.
[finalPostData appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
Maintenant nos données sont prêtes. Nous avons juste à ajouter ceci au corps de la demande.
Chaque fichier doit être NSData? – Shay
C'est probablement le moyen de le faire, surtout si vous transmettez des données binaires. Il suffit d'accumuler le corps de la requête dans un NSMutableData et d'ajouter les données du fichier le cas échéant. – warrenm
Vous voulez dire que tous les fichiers seront dans un NSMutableData? Comment le serveur va les séparer? Qu'est-ce que je dois faire? – Shay