一、点击头像图片 或者按钮 在相册选择照片返回img,网络上传头像要用data表单上传

(1)上传头像属性

// 图片二进制格式 表单上传
@property (nonatomic, strong) NSData *imageWithData;

(2)头像点击事件

- (void)headImageEvent{
NSLog(@"上传头像");
[self selectPhotoAlbumWithSelectPhotoHandle:^(UIImage *img) {
self.headerImageView.image = img;
NSData *dataWithImage;
dataWithImage = UIImageJPEGRepresentation(img, 0.3);
self.imageWithData = dataWithImage;
}]; }

(3)打开相册或者拍照

/**
弹出提示框 选择相机或者相册 @param selectPhotoHandle 选中或拍摄的图片
*/
- (void)selectPhotoAlbumWithSelectPhotoHandle:(void (^)(UIImage *))selectPhotoHandle{
self.selectPhotoHandle = selectPhotoHandle; UIAlertController *av = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[self takePhoto];
}];
UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"从手机相册选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[self LocalPhoto];
}];
UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
[av addAction:action1];
[av addAction:action2];
[av addAction:cancelAction];
[self presentViewController:av animated:YES completion:nil];
} //开始拍照
-(void)takePhoto
{
UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;
if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera])
{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
//设置拍照后的图片可被编辑
picker.allowsEditing = YES;
picker.sourceType = sourceType;
[self presentViewController:picker animated:YES completion:nil];
}else{
NSLog(@"模拟其中无法打开照相机,请在真机中使用");
}
} //打开本地相册
-(void)LocalPhoto{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
picker.delegate = self;
//设置选择后的图片可被编辑
picker.allowsEditing = YES;
[self presentViewController:picker animated:YES completion:nil];
} //当选择一张图片后进入这里
-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
UIImage* image = [info objectForKey:@"UIImagePickerControllerEditedImage"];
if (self.selectPhotoHandle) {
self.selectPhotoHandle(image);
}
[picker dismissViewControllerAnimated:YES completion:nil]; }

(4)网络上传头像

- (void)postUserHeaderImage
{
NSMutableDictionary *parameter = [[NSMutableDictionary alloc]init];
[parameter setValue:userToken forKey:@"userId"];
[parameter setValue:self.nickeNameTextField.text forKey:@"nickName"]; [[[NetRequest alloc]init]postRequestWithAPINameForData:@"/robot/userController/updateRecord.do" parameters:parameter imageWithData:self.imageWithData imageWithNameFile:@"portrait" NetRequestProgress:nil NetRequestSuccess:^(NSInteger code, NSString *msg, id response) { ShowMessage(@"编辑资料成功");
} NetRequestFaile:^(NSInteger code, NSString *msg, id response) {
ShowMessage(@"获取网络数据失败");
}];
}

(5)上传头像方法

// 以流文件方式上传图片(表单上传)
- (void)postRequestWithAPINameForData:(NSString *)api parameters:(NSDictionary *)param imageWithData:(NSData *)fileData imageWithNameFile:(NSString *)nameFile NetRequestProgress:(NetRequestProgress)progress NetRequestSuccess:(NetRequestSuccess)sucess NetRequestFaile:(NetRequestFaile)faile
{
// 请求地址
NSString *urlString = [NSString stringWithFormat:@"%@/%@", baseUrl, api]; // 设置状态栏网络访问的风火轮
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; // 网络请求Session
AFHTTPSessionManager* session = [AFHTTPSessionManager manager];
session.requestSerializer.timeoutInterval = .f;
session.responseSerializer.acceptableContentTypes = [session.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
// session.responseSerializer = [AFHTTPResponseSerializer serializer];
// 参数初始化
NSMutableDictionary *dicParam;
if (param) {
dicParam = [NSMutableDictionary dictionaryWithDictionary:param];
} else {
dicParam = [NSMutableDictionary dictionary];
}
// [dicParam setObject:@"i" forKey:@"p"]; // 平台
// [dicParam setObject:@"1.0.0" forKey:@"v"]; // 版本 [session POST:urlString parameters:dicParam constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { if (fileData.length > ) {
NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
// 注意 img 是后台给的流文件名 一定对应接口否则上传失败
[formData appendPartWithFileData:fileData name:nameFile fileName:[NSString stringWithFormat:@"%ld.jpg",(unsigned long)time] mimeType:@"image/jpeg"]; } } progress:^(NSProgress * _Nonnull uploadProgress) {
if (progress) {
progress(uploadProgress);
}
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// 取消设置状态栏风火轮
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; // API返回结果
NSInteger nCode = [[responseObject objectForKey:@"status"] integerValue];
NSString *strMsg = [responseObject objectForKey:@"msg"];
// id res = [responseObject objectForKey:@"data"]; if (sucess) {
sucess(nCode,strMsg,responseObject);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
// 取消设置状态栏风火轮
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
NSString* errResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding];
NSLog(@"----%@",errResponse); if (faile) {
faile([@"" intValue],@"网络请求失败\n请检查网络设置",nil);
}
}];
}

相册选择头像或者拍照 上传头像以NSData 图片二进制格式 表单上传的更多相关文章

  1. 文件的上传(表单上传和ajax文件异步上传)

    项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举的主要对于小文件上传的处理! 资源下载: 一. ...

  2. 普通文件的上传(表单上传和ajax文件异步上传)

    一.表单上传: html客户端部分: <form action="upload.ashx" method="post" enctype="mul ...

  3. 文件的上传(1)(表单上传和ajax文件异步上传)

    文件的上传(表单上传和ajax文件异步上传) 项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举 ...

  4. PHP流式上传和表单上传(美图秀秀)

    最近需要开发一个头像上传的功能,找了很多都需要授权的,后来找到了美图秀秀,功能非常好用. <?php /** * Note:for octet-stream upload * 这个是流式上传PH ...

  5. 巨蟒python全栈开发django11:ajax&&form表单上传文件contentType

    回顾: 什么是异步? 可以开出一个线程,我发出请求,不用等待返回,可以做其他事情. 什么是同步? 同步就是,我发送出了一个请求,需要等待返回给我信息,我才可以操作其他事情. 局部刷新是什么? 通过jq ...

  6. [转]html5表单上传控件Files API

    表单上传控件:<input type="file" />(IE9及以下不支持下面这些功能,其它浏览器最新版本均已支持.) 1.允许上传文件数量 允许选择多个文件:< ...

  7. java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例

    java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...

  8. Linux 基础命令-CURL 表单上传文件

    CURL -F, --form <name=content> (HTTP) This lets curl emulate a filled-in form in which a user ...

  9. 一般处理程序上传文件(html表单上传、aspx页面上传)

    html 表单上传文件        一般处理程序由于没有 apsx 页面的整个模型和控件的创建周期,而比较有效率.这里写一个用 html 表单进行文件上传的示例.        1. 表单元素选用 ...

随机推荐

  1. Objectvice-C中的super

    /** 狗:哈士奇 */ //僵尸 #import <Foundation/Foundation.h> @interface Dog : NSObject - (void) walk; + ...

  2. Kafka理论学习

    Kafka Consumer设计解析 http://www.jasongj.com/2015/08/09/KafkaColumn4/

  3. 异步模式模式Future(结合Callable可以获取线程返回结果)

    submit 和 excute是有啥区别 如果有这样的需求: 多线程实现下载,提高效率. 不论是Thread类还是Runnable接口重写run方法,有个特点就是没有返回值~~~~~~ 我都主线程 如 ...

  4. LoadRunner中两种录制模式的区别

    决定我们成为什么样人的,不是我们的能力,而是我们的选择. ——<哈利-波特与密室> 一.先看看两种模式的设置和录制脚本的区别 设置HTML录制模式: 设置URL录制模式: HTML脚本: ...

  5. linux系统配置之网络配置(centos)

    CentOS---网络配置详解 一.配置文件详解在RHEL或者CentOS等Redhat系的Linux系统里,跟网络有关的主要设置文件如下: /etc/host.conf         配置域名服务 ...

  6. YCSB-mapkeer-leveldb实测

    使用thrift0.8.0编译好java版的mapkeeper并安装到ycsb下,使用thrift0.9.2编译好c++版的mapkeeper并编译leveldb客户端运行. 测试成功.recordc ...

  7. yii的增删改查

    要想实现数据库的操作,必须首先初始化数据模型. 一.yii的数据库模型的初始化有两种.第一种是利用模型的静态方法model:第二种是实例化一个新的模型.以例子说明: //数据的查询关键代码 $good ...

  8. 谈谈javaScript

    谈谈javaScript  (杰我学习) 一. 什么是JavaScript       人们通常所说的JavaScript,其正式名称为ECMAScript.这个标准由ECMA组织发展和维护.ECMA ...

  9. jquery easyui 实战总结

    (2012-09-26 10:22:24) 转载▼ 标签: it 分类: Javascript 一.tree 1.根据node id查找对应的node,然后选择该节点:                 ...

  10. C# 获取点击列的索引

    datagridview 怎么获取选中行的某一列的索引比如 下面是表学号 姓名 所在年级 1    张     高一 2    李     高二当我选择第二行的时候 我想取所在年级的列索引 这时候那个 ...