iOS 上傳多張圖片和文字到自己的服務(wù)器

首先對上傳多種圖片到服務(wù)器利用了萬能的AFNetworking進(jìn)行了封裝.上代碼代碼不多。
封裝的網(wǎng)絡(luò)接口的.h中

/**
 上傳多張圖片方法
 
 @param imagesArray      上傳的圖片
 @param url        請求連接,根路徑
 @param filename   圖片的名稱(如果不傳則以當(dāng)時間命名)
 @param name       上傳圖片時填寫的圖片對應(yīng)的參數(shù) 服務(wù)器規(guī)定的
 @param params     參數(shù)
 @param progress   上傳進(jìn)度
 @param responseStyle 請求數(shù)據(jù)的格式
 @param success    請求成功返回數(shù)據(jù)
 @param fail       請求失敗
 
 */

+ (void)moreLoadWithImage:(NSMutableArray *)imagesArray
                      url:(NSString *)url 
                 filename:(NSString *)filename
                     name:(NSString *)name
                   params:(NSDictionary *)params
                 progress:(upLoadProgress)progress
              andResponse:(JYJResponseStyle)responseStyle
                  success:(successBlock)success
                     fail:(failureBlock)fail;

.m中

+(void)moreLoadWithImage:(NSMutableArray *)imagesArray url:(NSString *)url filename:(NSString *)filename name:(NSString *)name    params:(NSDictionary *)params progress:(upLoadProgress)progress andResponse:(JYJResponseStyle)responseStyle  success:(successBlock)success fail:(failureBlock)fail {
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];
    // 檢測網(wǎng)絡(luò)連接的單例,網(wǎng)絡(luò)變化時回調(diào)方法
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        NSLog(@"網(wǎng)絡(luò)狀態(tài) = %ld", status);
    }];
    
    // 1. 設(shè)置網(wǎng)絡(luò)管理者
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
   
    // 3. 設(shè)置返回數(shù)據(jù)的類型
    switch (responseStyle) {
        case JYJJSON:
            manager.responseSerializer = [AFJSONResponseSerializer serializer];
            break;
        case JYJXML:
            manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
            break;
        case JYJDATA:
            manager.responseSerializer = [AFHTTPResponseSerializer serializer];
            break;
            
        default:
            break;
    }
    
    // 4. 設(shè)置響應(yīng)數(shù)據(jù)類型
    
    [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/css",@"text/plain", @"application/javascript",@"image/jpeg", @"text/vnd.wap.wml", @"application/x-javascript",@"image/png", nil]];
    
    
    // 5. UTF-8轉(zhuǎn)碼
    
    url = [url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    [manager POST:url parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        for (NSInteger i = 0; i < imagesArray.count; i ++) {
            
            //壓縮圖片
            NSData *imageData = UIImageJPEGRepresentation(imagesArray[i], 0.5);
            NSString *imageFileName =filename;
            if (filename == nil || [filename isKindOfClass:[NSString class]] || filename.length == 0) {
                NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
                formatter.dateFormat = @"yyyy-MM-dd-HH-mm-ss";
                NSString *str = [formatter stringFromDate:[NSDate date]];
                imageFileName = [NSString stringWithFormat:@"%@.jpg",str];//以這種格式防止上傳的圖片重復(fù)覆蓋
            }
            //上傳圖片,以文件流的格式
            [formData appendPartWithFileData:imageData name:name fileName:imageFileName mimeType:@"image/jpeg"];
            
        }
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        NSLog(@"上傳速度--%lld,總進(jìn)度--%lld",uploadProgress.completedUnitCount,uploadProgress.totalUnitCount);
        if (progress) {
            progress(uploadProgress.completedUnitCount,uploadProgress.totalUnitCount);
        }
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        NSLog(@"上傳圖片成功-%@",responseObject);
        if (success) {
            success(responseObject);
        }
        
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error=%@",error);
        if (fail) {
            fail(error);
        }
        
    }];
    
}

各種參數(shù)已經(jīng)寫得很清楚了。在哪個地方用直接調(diào)用就行。
我自己封裝的網(wǎng)絡(luò)類叫(JYJ_NetWorkParser)
//再說一遍吧
第一個參數(shù):圖片數(shù)組
第二個參數(shù):后臺給的接口
第三個參數(shù):隨便起個名字
第四個參數(shù):后臺給你的一個字段(和后臺保持一致)
第五個參數(shù):參數(shù)(可以放文字描述 )
第六個參數(shù):上傳進(jìn)度
第七個參數(shù):請求數(shù)據(jù)的格式
第八第九個:請求成功、失敗返回的數(shù)據(jù)

[JYJNetWorkParser moreLoadWithImage:self.imageArray url:kPostMessageURL filename:@"myImages" name:@"files" params:dic progress:nil andResponse:JYJJSON success:^(id result) {


}fail:^(NSError *error) {
        
      }];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容