码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2017-09-24 16:22:00      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:obj   date   需求   task   orm   网络开发   pen   vdi   传参数   

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参数和多文件同时上传【多文件上传】

标签:obj   date   需求   task   orm   网络开发   pen   vdi   传参数   

原文地址:http://www.cnblogs.com/wangkejia/p/7587314.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!