iOS开发-AFNetworking参数和多文件同时上传多文件上传

Posted 小K’s Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发-AFNetworking参数和多文件同时上传多文件上传相关的知识,希望对你有一定的参考价值。

1. 前言

    在项目开发中,我们经常需要上传文件,例如:上传图片,上传各种文件,而有时也需要将参数和多个文件一起上传,不知道大家的项目中遇到了没有,我在最近的项目中,就需要这样的一个功能:同时上传参数、多张图片和音频;

2. 功能实现

在实现此功能之前,需要引入第三方AFNetworking,这是一个非常强大的网络开发工具,这里我就不多说了,下面是我用此工具,封装的一个同时上传参数和多个文件的方法:

2.1 方法名

/**

 多文件上传,支持同时上传参数、多个图片、多个音频,【需要将每一个文件转化为date流,用数组传过去

url:请求的网络地址

pram:请求参数【我一般用dictionary】

arrayImg:图片的date类型数组

arrayAudio:音频的date类型数组

success:上传成功回调

faile:上传失败回调

progress:上传进度回调

 */

+ (void)uploadMoreFileHttpRequestURL:(NSString *)url  RequestPram:(id)pram arrayImg:(NSArray *)arrayImg arrayAudio:(NSArray *)arrayAudio RequestSuccess:(void(^)(id respoes))success RequestFaile:(void(^)(NSError *erro))faile UploadProgress:(void(^)(NSProgress * uploadProgress))progress;

2.2 方法实现

+ (void)uploadMoreFileHttpRequestURL:(NSString *)url  RequestPram:(id)pram arrayImg:(NSArray *)arrayImg arrayAudio:(NSArray *)arrayAudio RequestSuccess:(void(^)(id respoes))success RequestFaile:(void(^)(NSError *erro))faile UploadProgress:(void(^)(NSProgress * uploadProgress))progress{

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    manager.requestSerializer = [AFHTTPRequestSerializer serializer];

    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

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

        ///用时间设置文件名

        NSDate *date = [NSDate date];

        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

        [formatter setDateFormat:@"yyyyMMddhhmmss"];

        NSString *dateNow = [formatter stringFromDate:date];

 

        NSString *imgFileId = @"handsomekkImg";

        //  NSString *avdioFileId = @"ebookAvdio";

        ///图片文件data追加

        for (int i = 0; i < arrayImg.count; i++) {

            ///文件名:这是多个文件名不一样,多以我就用i实现

            NSString *fileName = [NSString stringWithFormat:@"%@%@%d.png",imgFileId,dateNow,i];

            ///图片支持类型jpg/png/jpeg

            [formData appendPartWithFileData:arrayImg[i] name:[NSString stringWithFormat:@"%@%d",imgFileId,i] fileName:fileName mimeType:@"jpg/png/jpeg"];

        }

        ///此处是音频追加和image追加是一样的,不在多描述

       //        for (int i = 0; i < arrayAudio.count; i++) {

       //            NSString *fileName = [NSString stringWithFormat:@"%@%@%d.mp3",avdioFileId,dateNow,i];

       //            [formData appendPartWithFileData:arrayAudio[i] name:[NSString stringWithFormat:@"%@%d",avdioFileId,i] fileName:fileName mimeType:@"mp3"];

       //      }

    } progress:^(NSProgress * _Nonnull uploadProgress) {

         ///进度回调

         progress(uploadProgress);

    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

       ///上传功能回调

        if (success) {

            success(responseObject);

        }

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        ///失败回调

        faile(error);

    }];

}

方法中,我们不要求上传的文件名固定,多以文件名不一样就可以,后台去取出来;大家根据自己的需求,定义上传的文件名就可以了。

 


以上是关于iOS开发-AFNetworking参数和多文件同时上传多文件上传的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发-AFNetworking封装Get(自定义HTTP Header)和Post请求及文件下载

iOS开发网络数据之AFNetworking使用

iOS开发-登录界面开发AFNetworking的引入-Swfit4.1_Xcode9.3.1

iOS开发之AFNetworking 3.0.4使用

带参数的 Afnetworking 2

iOS AFNetworking HTTPS 认证