IOS關於圖片上傳

iOS上傳圖片有固定的格式 
需要把圖片的數據再request的HTTPBody中配置好

格式

/*

     --Boundary+72D4CD655314C423   // 分割符,以“--”開頭,後面的字隨便寫,只要不寫中文即可

     Content-Disposition: form-data; name="uploadFile"; filename="001.png"  //這裏一定要記住filename = “fghhj.jpg”一定要有擴展名jpg或者別的 這裏註明服務器接收圖片的參數(類似於接收用戶名的userName)及服務器上保存圖片的文件名

     Content-Type:image/png  // 圖片類型爲png

     Content-Transfer-Encoding: binary  // 編碼方式

     // 這裏是空一行,必不可少!!

     ... contents of boris.png ...  // 圖片數據部分

     --Boundary+72D4CD655314C423--  // 分隔符後面以"--"結尾,表明結束

     */

- (void)setMutableRequest:(NSMutableURLRequest *)request WithImage:(UIImage *)image Parameters:(NSDictionary *)paramerters {
    
    //構造分界線 boundary
    NSString *boundary = [NSString stringWithFormat:@"upoad%d%d",arc4random(),arc4random()];
    //圖片數據
    NSData *imageData = UIImagePNGRepresentation(image);/*(image, 1);*/
    
    
    /*
     --Boundary+72D4CD655314C423   // 分割符,以“--”開頭,後面的字隨便寫,只要不寫中文即可
     Content-Disposition: form-data; name="uploadFile"; filename="001.png"  // 這裏註明服務器接收圖片的參數(類似於接收用戶名的userName)及服務器上保存圖片的文件名
     Content-Type:image/png  // 圖片類型爲png
     Content-Transfer-Encoding: binary  // 編碼方式
     // 這裏是空一行,必不可少!!
     ... contents of boris.png ...  // 圖片數據部分
     --Boundary+72D4CD655314C423--  // 分隔符後面以"--"結尾,表明結束
     */
    //請求頭
    NSMutableString *topStr = [NSMutableString string];
    
    //如果有參數,一定要先弄參數的
    NSMutableDictionary *mdic = paramerters.mutableCopy;
    [mdic setObject:[self getUserId] forKey:@"token"];
    NSArray *keys = [mdic allKeys];
    NSLog(@"%@",keys);
    
    for (int i = 0; i < keys.count; i++) {
        
        NSString *key = keys[i];
        
        //添加分界線,換行
        [topStr appendFormat:@"--%@\r\n",boundary];
        //添加字段名稱,換2行
        [topStr appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key];
        //添加字段的值
        [topStr appendFormat:@"%@\r\n",mdic[key]];
        
    }
    
    NSLog(@"%@",topStr);
    
    
    
    
//    [topStr appendFormat:@"--%@\r\n",boundary];
//    [topStr appendFormat:@"Content-Disposition: form-data; name=\"uploadFile\"; filename=\"%@\"\r\n",@"icon"];
//    [topStr appendFormat:@"Content-Type:image/jpeg\r\n"];
//    [topStr appendFormat:@"Content-Transfer-Encoding: binary\r\n\r\n"];
    
    [topStr appendString:[NSString stringWithFormat:@"--%@\r\n",boundary]];
    [topStr appendString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"uploadFile\"; filename=\"%@\"\r\n",@"icon.png"]];
    [topStr appendString:[NSString stringWithFormat:@"Content-Type:image/png\r\n"]];
    [topStr appendString:[NSString stringWithFormat:@"Content-Transfer-Encoding: binary\r\n\r\n"]];

    
    //拼接數據
    NSMutableData *requestBody = [NSMutableData data];
    [requestBody appendData:[topStr dataUsingEncoding:NSUTF8StringEncoding]];
    [requestBody appendData:imageData];
    [requestBody appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    //結束部分
    [requestBody appendData:[[NSString stringWithFormat:@"--%@--",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
   
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:requestBody];
    
    [request setValue:[NSString stringWithFormat:@"%zd", requestBody.length] forHTTPHeaderField:@"Content-Length"];
    // 設置頭部數據,指定了http post請求的編碼方式爲multipart/form-data(上傳文件必須用這個)。
    [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary] forHTTPHeaderField:@"Content-Type"];
    
}

 

文件上傳請求數據格式

部分文件的type

 

AFNetWorking 上傳圖片

- (void)uploadImageWithUrl:(NSString *)url
                        image:(UIImage *)image
                        Parameters:(NSDictionary *)paramerters
                        Success:(SuccessBlock)success
                        ErrorBlock:(ErrorBlock)errorBlock {
    
    WS(ws);
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    AFHTTPRequestOperation *op = [manager POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        
        NSMutableDictionary *mdic = paramerters.mutableCopy;
        [mdic setObject:[ws getUserId] forKey:@"token"];
        
        //如果有參數
        NSArray *keys = [mdic allKeys];
        for (int i = 0; i < keys.count; i++) {
            
            NSString *key = keys[i];
            NSString *content = mdic[key];
            NSData *contenData = [content dataUsingEncoding:NSUTF8StringEncoding];
            //調用這個方法
            [formData appendPartWithFormData:contenData name:key];
        
        }
        
        
        //配置圖片
        NSData *imageData = UIImagePNGRepresentation(image);
        NSDateFormatter *df = [[NSDateFormatter alloc]init];
        df.dateFormat = @"YYYYMMddHHmmss";
        NSString *fileName = [NSString stringWithFormat:@"%@.png",[df stringFromDate:[NSDate new]]];
        [formData appendPartWithFileData:imageData name:@"myfile" fileName:fileName mimeType:@"image/png"];
        
    } success:^(AFHTTPRequestOperation * _Nonnull operation, id  _Nonnull responseObject) {
        if (success) {
            NSLog(@"%@",responseObject);
        }
    } failure:^(AFHTTPRequestOperation * _Nonnull operation, NSError * _Nonnull error) {
        NSLog(@"%@",error);
    }];
    
    [op start];
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章