使用 AFMultipartFormData AFNetworking 3.0 上传图像

Posted

技术标签:

【中文标题】使用 AFMultipartFormData AFNetworking 3.0 上传图像【英文标题】:Image upload using AFMultipartFormData AFNetworking 3.0 【发布时间】:2017-01-26 11:53:28 【问题描述】:
NSURL *URL = [NSURL URLWithString:@"some APi"];

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

UIImage *myImageObj = [UIImage imageNamed:@"avatar.jpg"];
NSData *imageData= UIImagePNGRepresentation(myImageObj);

[manager POST:URL.absoluteString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 
    [formData appendPartWithFileData:imageData
                                name:@"file"
                            fileName:@"avatar.jpg" mimeType:@"image/jpeg"];

    // etc.
 progress:nil success:^(NSURLSessionDataTask *task, id responseObject) 
    NSLog(@"Response: %@", responseObject);
 failure:^(NSURLSessionDataTask *task, NSError *error) 
    NSLog(@"Error: %@", error);
];

我正在尝试使用 afnetworking 3.0 上传图片,但每次都出现此错误

域=com.alamofire.error.serialization.response Code=-1011 "请求 失败:内部服务器错误 (500)” UserInfo=com.alamofire.serialization.response.error.response= URL: Some URL status 代码:500,标题 “访问控制允许来源”=“*”; “内容长度”= 291; “内容类型”=“文本/html”; 日期 =“格林威治标准时间 2017 年 1 月 26 日星期四 11:41:19”; 服务器 = "Werkzeug/0.11.11 Python/2.7.12"; ,

【问题讨论】:

见***.com/questions/39245470/… 【参考方案1】:

幸运的是邮递员提供了 Objective-C 和一些其他语言的代码,但我使用了 AFNetworking 这个

    NSURL *URL = [NSURL URLWithString:@"your URL"];

    UIImage *myImageObj = [UIImage imageNamed:@"image.jpg"];
    NSData *imageData= UIImageJPEGRepresentation(myImageObj, 0.6);

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //manager.responseSerializer=[AFJSONResponseSerializer serializer];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    [manager.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];

    [manager POST:URL.absoluteString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) 
        [formData appendPartWithFileData:imageData
                                    name:@"file"
                                fileName:@"image.jpg" mimeType:@"image/jpeg"];

        // etc.
     progress:nil success:^(NSURLSessionDataTask *task, id responseObject) 
        NSLog(@"Response: %@", responseObject);

        NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
        NSLog(@"%@",string);

     failure:^(NSURLSessionDataTask *task, NSError *error) 
        NSLog(@"Error: %@", error);
    ];

【讨论】:

以上是关于使用 AFMultipartFormData AFNetworking 3.0 上传图像的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking:从文件发送图像

Swift Package Manager 在使用 Almofire 时使用未解析的标识符“AF”

如何使用 af_imageAspectScaled 缩放到所需的像素大小

CameraX AF-S / MF

使用 AlamoFireImage 在 CollectionView 中使用 .af_setImage 方法加载数组 url 的致命错误

如何使用 recvfrom 获取 AF_INET6 套接字的地址