您的位置:首页 > 移动开发 > IOS开发

IOS关于图片上传

2016-01-18 09:19 411 查看
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];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: