Я пытаюсь загрузить изображение на свой AWS-сервер с использованием multipart form afnetworking 3.0, но, судя по всему, каждое изображение, которое я пытался загрузить, попало в блок отказов. Коды, написанные в объективе c.AFNetworking 3.0 Многостраничные данные формы для загрузки ошибки изображения
- (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;
}
Ошибка я получаю
Ошибка домена = com.alamofire.error.serialization.response Code = -1011 "Ошибка запроса: плохой запрос (400)" UserInfo = {NSUnderlyingError = 0x170248940 {Ошибка домена = com.alamofire.error.serialization.response Код = -1016 "Ошибка запроса: неприемлемый тип содержимого: application/xml" UserInfo = {com.alamofire.serialization.response.error.response = { URL: https://....s3.amazonaws.com/} {код состояния: 400, заголовки { Connection = закрыть; "Content-Type" = "application/xml"; Дата = "Вт, 20 дек. 2016 01:53:47 GMT"; Сервер = AmazonS3; «Передача-кодирование» = Идентичность; "x-amz-id-2" = "....."; "x-amz-request-id" = ....; }},
Я попытался изменить тип содержимого для сериализатора ответа и все еще не удалось.
пытался октет-поток, как контент-тип? – Joshua
@ Joshua как продолжить octet-stream как тип контента и что он делает? –
Хорошее объяснение будет здесь: https://www.reference.com/technology/octet-stream-ecf0fe1dd4c152a0 и на основании ошибки кажется, что сервер, на который вы отправляете, не принимает приложение/xml – Joshua