AFNetworking上传图片, 回复内容

1楼戴仓薯 2016年07月02日回答

这里有几个问题:

  1. mime 的设置有一些矛盾:

    [m.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
     [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"img.img%d", i+1] fileName:@"image.png" mimeType:@"image/png"];

    这两个地方你分别设置了两种mime,multipart/form-dataimage/png。哪一个是正确的?需要跟后台沟通一下。

  2. 跟后台联调一下,收到你的请求了吗?请求什么内容?他返回的什么?这个错似乎一般是解析json的时候报,也许是后台没有返回合法 json。另外,你的请求是一次性上传多个文件,不知道你的后台接口是否支持,可以尝试只传一张图片。

  3. AFNetworking 的块里不需要调dispatch_async(dispatch_get_main_queue()...它已经是帮你回到主线程执行的。

2楼酷酷的哀殿 2016年07月02日回答

能否把 imageData 的数据打印出来?

3楼majian 2月16日回答

请问lz解决了吗?
我也遇到报The data couldn’t be read because it isn’t in the correct format.
但是事实上图片上传成功了
客户端代码:- (IBAction)upload:(id)sender {

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
 NSString *url3 = @"http://127.0.0.1:5000/upload";

[manager POST:url3 parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {

    UIImage *image = [UIImage imageNamed:@"star"];
    NSData *imageData = UIImagePNGRepresentation(image);
    NSString *fileName = @"star.png";
    [formData appendPartWithFileData:imageData
                                name:@"file"
                            fileName:fileName
                            mimeType:@"image/png"];    
} progress:^(NSProgress *_Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask *_Nonnull task, id _Nullable responseObject) {
    NSLog(@"upload completed:%@",responseObject);
} failure:^(NSURLSessionDataTask *_Nullable task, NSError * _Nonnull error) {
    NSLog(@"upload failed");
    NSLog(@"%@",error.localizedDescription);
}];

}

后端代码(python):
class receive(restful.Resource):

def post(self):
    file = request.files['file']
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], 'star2.png'))
    return 'upload completed'

api.add_resource(receive, '/upload', methods=['POST'])