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

ios开发 利用AFNetworking实现同时上传字符串与图片数据

2017-08-12 10:07 501 查看
        最近在做一个人脸识别考勤系统的时候,遇到了需要同时上传学生学号和学生照片到服务器的需求。因为要根据学生学号和学生照片来判断是否为本人,所有这两个数据不能分开上传到服务器,必须得同时上传。所有我们用到了AFNetworking的AFMultiparFormData来传输数据。下面是程序的关键代码:

//上传头像图片到服务器
-(void) postImageToServer
{
_manager = [AFHTTPSessionManager manager] ;
_manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:
@"application/json",
@"text/html"       ,
@"image/jpeg"      ,
@"image/png"       ,
@"image/jpg"       ,
@"application/octet-stream",
@"text/json"      ,
nil] ;

_manager.requestSerializer  = [AFHTTPRequestSerializer serializer ] ;
_manager.responseSerializer = [AFHTTPResponseSerializer serializer] ;

[_manager POST:@"http://192.168.31.244:8080/ImageUploadServer/uploadimage" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData)
{
//上传学生学号到服务器
//_strStudentId为学生学号字符串
NSData *data = [_strStudentId dataUsingEncoding:NSUTF8StringEncoding] ;
[formData appendPartWithFormData:data name:@"studentId"] ;

//在网络开发中,上传文件时,文件是不允许被覆盖,文件重名
//要解决此问题,可以在上传时使用当前的系统事件作为文件名
NSDateFormatter *formatter = [[NSDateFormatter alloc] init] ;

//设置时间格式
formatter.dateFormat = @"yyyyMMddHHmmss" ;
NSString *str = [formatter stringFromDate:[NSDate date]] ;
NSString *fileName = [NSString stringWithFormat:@"%@.jpeg",str] ;

//压缩图片
//_imageEdit是从相机获取的图片
NSData *imageData = UIImageJPEGRepresentation(_imageEdit, 0.1) ;

//上传图片到服务器
[formData appendPartWithFileData:imageData name:@"file" fileName:fileName mimeType:@"image/jpeg"] ;
}

//上传过程中调用
progress:^(NSProgress * _Nonnull uploadProgress)
{
}

//上传成功调用
success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject)
{
NSLog(@"上传成功!") ;
}
failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error)
{
NSLog(@"上传失败") ;
}] ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: