ios - AFNetworking上传图片,
高洛峰
高洛峰 2017-04-18 09:18:14
0
3
343

我这里用AFNetworking上传图片
报The data couldn’t be read because it isn’t in the correct format.有人帮忙看看是哪里出问题了么?下面是我写的代码。

    AFHTTPRequestOperationManager *m = [AFHTTPRequestOperationManager manager];
    m.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html", @"application/json", nil];
    m.requestSerializer = [AFHTTPRequestSerializer serializer];
    [m.requestSerializer setValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
    
    NS_APPDebugLog(@"请求链接:%@/%@", urlString, parametersDic);
    
    [m POST:@"http://59.48.96.118:7001/portal/SI_USR00025/upload.do" parameters:nil
                constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        for (int i = 0; i < imagePickerArray.count; i++)
        {
            UIImage *portraitImg = imagePickerArray[i];
            portraitImg = [UIImage scaleToSize:portraitImg];
            portraitImg = [portraitImg fixOrientation];
            NSData *imageData = [NSData compressImage:portraitImg];
            [formData appendPartWithFileData:imageData
                                        name:[NSString stringWithFormat:@"img.img%d", i+1]
                                    fileName:@"image.png"
                                    mimeType:@"image/png"];
        }
    } success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {
        NSLog(@"成功");
    } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
        NSLog(@"失败");
        dispatch_async(dispatch_get_main_queue(),^{failure(error);});
    }];
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

répondre à tous(3)
PHPzhong

Voici quelques questions :

  1. Il y a quelques contradictions dans les paramètres 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"];

    Vous avez posé deux mimes à ces deux endroits, multipart/form-data et image/png. Lequel est correct ? Besoin de communiquer avec le backend.

  2. Contactons le backend pour vérifier. Avez-vous reçu votre demande ? Quel contenu est demandé ? Qu'est-ce qu'il a rendu ? Cette erreur semble être généralement signalée lors de l'analyse de json. Peut-être que l'arrière-plan ne renvoie pas de json valide. De plus, votre demande consiste à télécharger plusieurs fichiers à la fois. Je ne sais pas si votre interface backend le prend en charge. Vous pouvez essayer de télécharger une seule image.

  3. Il n'est pas nécessaire d'ajuster le bloc AFNetworking dispatch_async(dispatch_get_main_queue()... Il vous a déjà aidé à revenir au thread principal pour l'exécution.

大家讲道理

Pouvez-vous imprimer les données d'imageData ?

洪涛

L'avez-vous résolu ?
J'ai également rencontré le rapport Les données n'ont pas pu être lues car elles ne sont pas dans le bon format.
Mais en fait, le téléchargement de l'image a réussi
Code client :- (IBAction)upload :(id )expéditeur {

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

[manager POST:url3 paramètres: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);
}];

}

Code backend (python) :
classe recevoir(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', méthodes=['POST'])

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal