iOS 上傳多張圖片和文字到本身的服務器

首先對上傳多種圖片到服務器利用了萬能的AFNetworking進行了封裝.上代碼代碼很少。 封裝的網絡接口的.h中javascript

/**
 上傳多張圖片方法
 
 @param imagesArray      上傳的圖片
 @param url        請求鏈接,根路徑
 @param filename   圖片的名稱(若是不傳則以當時間命名)
 @param name       上傳圖片時填寫的圖片對應的參數 服務器規定的
 @param params     參數
 @param progress   上傳進度
 @param responseStyle 請求數據的格式
 @param success    請求成功返回數據
 @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中css

+(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];
    // 檢測網絡鏈接的單例,網絡變化時回調方法
    [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        NSLog(@"網絡狀態 = %ld", status);
    }];
    
    // 1. 設置網絡管理者
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
   
    // 3. 設置返回數據的類型
    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. 設置響應數據類型
    
    [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轉碼
    
    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];
            }
            //上傳圖片,以文件流的格式
            [formData appendPartWithFileData:imageData name:name fileName:imageFileName mimeType:@"image/jpeg"];
            
        }
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        NSLog(@"上傳速度--%lld,總進度--%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);
        }
        
    }];
    
}

複製代碼

各類參數已經寫得很清楚了。在哪一個地方用直接調用就行。 我本身封裝的網絡類叫(JYJ_NetWorkParser) //再說一遍吧 第一個參數:圖片數組 第二個參數:後臺給的接口 第三個參數:隨便起個名字 第四個參數:後臺給你的一個字段(和後臺保持一致) 第五個參數:參數(能夠放文字描述 ) 第六個參數:上傳進度 第七個參數:請求數據的格式 第八第九個:請求成功、失敗返回的數據html

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


}fail:^(NSError *error) {
        
      }];
複製代碼
相關文章
相關標籤/搜索