J'ai essayé de télécharger une image sur mon serveur AWS en utilisant des données de formulaire multipart afnetworking 3.0 mais apparemment, chaque image que j'ai essayé de télécharger s'est retrouvée dans le bloc de défaillance. Les codes écrits en objectif-c.AFNetworking 3.0 Données de formulaire en plusieurs parties pour télécharger une erreur d'image
- (NSURLSessionUploadTask *)uploadImageTask:(NSMutableDictionary *)dictionary
{
NSString *s3BucketUrl = [dictionary objectForKey:@"s3BucketUrl"];
NSData *imageData = [dictionary objectForKey:@"imageData"];
NSString *contentType = [dictionary objectForKey:@"contentType"];
NSString *filename = [dictionary objectForKey:@"filename"];
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:s3BucketUrl parameters:dictionary constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData name:@"file" fileName:filename mimeType:contentType];
} error:nil];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionUploadTask *uploadTask = [[NSURLSessionUploadTask alloc] init];
uploadTask = [manager
uploadTaskWithStreamedRequest:request
progress:^(NSProgress * _Nonnull uploadProgress) {
// This is not called back on the main queue.
// You are responsible for dispatching to the main queue for UI updates
dispatch_async(dispatch_get_main_queue(), ^{
//Update the progress view
});
}
completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
if (!error) {
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(onUploadImageTask:)])
{
[self.delegate onUploadImageTask:nil];
}
} else {
if (self.delegate != nil && [self.delegate respondsToSelector:@selector(onUploadImageTask:)])
{
[self.delegate onUploadImageTask:error];
}
}
}];
[uploadTask resume];
return uploadTask;
}
L'erreur que je reçois est
Code d'erreur Domain = = -1011 de com.alamofire.error.serialization.response "Échec de la demande: mauvaise demande (400)" UserInfo = {NSUnderlyingError = 0x170248940 {Erreur domaine = com.alamofire.error.serialization.response Code = -1016 "Demande échouée: type de contenu inacceptable: application/xml" UserInfo = {com.alamofire.serialization.response.error.response = { URL: https://....s3.amazonaws.com/} {code d'état: 400, en-têtes { Connexion = fermer; "Content-Type" = "application/xml"; Date = "Mar, 20 Dec 2016 01:53:47 GMT"; Serveur = AmazonS3; "Transfer-Encoding" = Identité; "x-amz-id-2" = "....."; "x-amz-request-id" = ....; }},
J'ai essayé de changer le type de contenu pour la réponse sérialiseur et échouent toujours.
essayé octet-stream comme le type de contenu? – Joshua
@Joshua comment procéder octet-stream comme type de contenu et que fait-il? –
Une bonne explication sera ici: https://www.reference.com/technology/octet-stream-ecf0fe1dd4c152a0 et basé sur l'erreur, il semble que le serveur que vous envoyez à n'accepte pas l'application/xml – Joshua