iOS-AFNetworking參數和多文件同時上傳【多文件上傳】


1. 前言

    在項目開發中,我們經常需要上傳文件,例如:上傳圖片,上傳各種文件,而有時也需要將參數和多個文件一起上傳,不知道大家的項目中遇到了沒有,我在最近的項目中,就需要這樣的一個功能:同時上傳參數、多張圖片和音頻;

2. 功能實現

在實現此功能之前,需要引入第三方AFNetworking,這是一個非常強大的網絡開發工具,這里我就不多說了,下面是我用此工具,封裝的一個同時上傳參數和多個文件的方法:

2.1 方法名

/**

 多文件上傳,支持同時上傳參數、多個圖片、多個音頻,【圖片為date流,音頻為沙盒路徑,用數組傳過去】

url:請求的網絡地址

pram:請求參數【我一般用dictionary】

arrayImg:圖片date類型數組

arrayAudio:音頻地址數組

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"];

        }

        ///  此處是音頻,我傳的是音頻文件本地沙盒地址,所以用 appendPartWithFileURL 方法

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

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

        ///   [formData appendPartWithFileURL:[NSURL URLWithString:arrayAudio[i]] name:[NSString stringWithFormat:@"%@%d",arrayAudio,i] fileName:fileName mimeType:@"application/octet-stream" error:nil]; 

        ///    }

 

    } 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);

    }];

}

 

方法中,我們不要求上傳的文件名固定,多以文件名不一樣就可以,后台去取出來;可以根據自己的需求,定義上傳的文件名就可以。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM