iOS 图片和文字一起上传

九路
• 阅读 1474

最近在忙着开发公司的一个项目,中间遇到很多坑,对于图片的上传在这里我也不做太多的介绍,网上各种大神的资料都有的,今天我主要说一下我再上传图片和文字的时候遇到的一些坑(图文上传我们很多时候都会遇到,遇到多了网上找的各种博客,解决了图文一起上传的问题)废话不多说,直接上代码:

 /** * 上传图文 */  -----(void)upLoadImageViewToServiceWithIconImage:(UIImage *)image{    //1. 利用时间戳当做图片名字    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];    formatter.dateFormat = @"yyyyMMddHHmmss";    NSString *imageName = [formatter stringFromDate:[NSDate date]];    NSString *fileName = [NSString stringWithFormat:@"%@.jpg",imageName];        //2. 图片二进制文件    NSData *imageData = UIImageJPEGRepresentation(image, 0.7f);        NSLog(@"upload image size: %ld k", (long)(imageData.length / 1024));        //3. 发起网络请求    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain", @"application/json", @"text/html", nil];        AFHTTPRequestSerializer *request = [AFJSONRequestSerializer serializer];        NSDictionary *params = @{@"imageType":CJUserIconImageType};    if (params != nil) {        for (NSString *httpHeaderField in params.allKeys) {            NSString *value = params[httpHeaderField];            [request setValue:value forHTTPHeaderField:httpHeaderField];        }    }    manager.requestSerializer = request;        [manager POST:CJUploadImageBaseURL parameters:nil constructingBodyWithBlock:^(id_Nonnull formData) {

// 上传图片,以文件流的格式,这里注意:name是指服务器端的文件夹名字

[formData appendPartWithFileData:imageData name:@"file" fileName:fileName mimeType:@"image/jpeg"];

} progress:^(NSProgress * _Nonnull uploadProgress) {

//        [SVProgressHUD showProgress:uploadProgress.fractionCompleted];

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

CJLog(@"%@", responseObject);

// 提交完图片之后 上传信息

NSString *code = [responseObject objectForKey:@"code"];

if ([code integerValue] == 0000) {

self.iconImageURL = [[responseObject objectForKey:@"data"] objectForKey:CJUploadImageBackImagepath];

}

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

CJLog(@"%@", error);

}];

}

、、、

上面的是整个的上传方法,一下是分开分析一下如何上传图片和文字的问题

图片在上传到服务器的时候一般都是以二进制流的形式提交的,为了以后用户量增大避免不必要的麻烦,图片的名字随机定义下,我这里是根据时间戳来命名的

、、、

//1. 利用时间戳当做图片名字

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

formatter.dateFormat = @"yyyyMMddHHmmss";

NSString *imageName = [formatter stringFromDate:[NSDate date]];

NSString *fileName = [NSString stringWithFormat:@"%@.jpg",imageName];

、、、

把图片转成二进制文件 根据你们你们公司要求图片格式,也可以是png格式的

、、、

//2. 图片二进制文件

NSData *imageData = UIImageJPEGRepresentation(image, 0.7f);

、、、

* 在发起提交的时候,我这里网络请求用的是AFN (强大的AFN),这里设置一下请求头,把我们所需要上传的文字信息放在请求头里面,图片的二进制文件放在请求体里面,跟你们后台API人员沟通好,确定好文件的字段,不然字段不统一,就坑了。。

、、、

//3. 发起网络请求 

  AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain", @"application/json", @"text/html", nil];     

AFHTTPRequestSerializer *request = [AFJSONRequestSerializer serializer];   

    NSDictionary *params = @{@"imageType":CJUserIconImageType};    if (params != nil) {        for (NSString *httpHeaderField in params.allKeys) {         

NSString *value = params[httpHeaderField];       

  [request setValue:value forHTTPHeaderField:httpHeaderField];        } 

  }   

manager.requestSerializer = request;     

  [manager POST:CJUploadImageBaseURL parameters:nil constructingBodyWithBlock:^(id_Nonnull formData) {

// 上传图片,以文件流的格式,这里注意:name是指服务器端的文件夹名字

[formData appendPartWithFileData:imageData name:@"file" fileName:fileName mimeType:@"image/jpeg"];

} progress:^(NSProgress * _Nonnull uploadProgress) {

//        [SVProgressHUD showProgress:uploadProgress.fractionCompleted];

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

CJLog(@"%@", responseObject);

// 提交完图片之后 上传信息

NSString *code = [responseObject objectForKey:@"code"];

if ([code integerValue] == 0000) {

self.iconImageURL = [[responseObject objectForKey:@"data"] objectForKey:CJUploadImageBackImagepath];

}

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

CJLog(@"%@", error);

}]; 

上面params就是文本所对应的字段了,我们这里是只设置了图片的类型,其实主要是跟你们公司后台沟通好,API 类型一致就不会出问题

如果代码没有copy错的话,换一下里面的字段就可以用的,好了,第一次发简书,先到这里吧,欢迎各位大神指正。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
九路 九路
3年前
Swift开发-OC与Swift混编以及纯Swift编码所遇到的问题(二)
上篇在介绍了Swift与OC混编开发所需要准备的一些必要条件 SwiftObjectiveC混编注意事项(https://www.jianshu.com/p/52ab6a316cbe),今天只说一下我在实际项目中所踩过的坑,希望你们以后绕过这些坑吧。1、使用cocopods管理Swift文件所遇到的问题:我们在开发的过程中,各种优秀的框架
待兔 待兔
3年前
Swift开发-OC与Swift混编以及纯Swift编码所遇到的问题(一)
前言:最近一段时间比较忙,公司项目比较多,直到现在年后过来以后总结一下之前项目中遇到的问题,以及自己使用Swift开发所遇到的坑。现在大家都知道Swift已经渐渐趋于完善,以后很有可能会替代ObjectC成为主流的iOS开发语言,所以各位以后还想从事iOS开发的程序猿(媛)们,早作准备吧!今天我们主要说一下ObjectiveC和Swift混编
Easter79 Easter79
2年前
springboot获取项目跟目录
springboot部署之后无法获取项目目录的问题:之前看到网上有提问在开发一个springboot的项目时,在项目部署的时候遇到一个问题:就是我将项目导出为jar包,然后用javajar运行时,项目中文件上传的功能无法正常运行,其中获取到存放文件的目录的绝对路径的值为空,文件无法上传。问题链接(https://www.oschina.
九路 九路
3年前
Swift开发-OC与Swift混编以及纯Swift编码所遇到的问题(一)
前言:最近一段时间比较忙,公司项目比较多,直到现在年后过来以后总结一下之前项目中遇到的问题,以及自己使用Swift开发所遇到的坑。现在大家都知道Swift已经渐渐趋于完善,以后很有可能会替代ObjectC成为主流的iOS开发语言,所以各位以后还想从事iOS开发的程序猿(媛)们,早作准备吧!今天我们主要说一下ObjectiveC和Swift混编
Easter79 Easter79
2年前
SpringMVC上传文件遇到的问题
完整错误:org.springframework.beans.BeanInstantiationException:Couldnotinstantiatebeanclass\org.springframework.web.multipart.MultipartFile\:Specifiedclassisaninterface
Stella981 Stella981
2年前
HTML5 file API加canvas实现图片前端JS压缩并上传
一、图片上传前端压缩的现实意义对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验。这种体验包括两方面:1.由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅,同时大大降低了网络异常导致上传失败风险。2.最最重要的体验改进点:省略了图片的再加工成本。很多网站的图片上传功能都会对图片的大小进
Stella981 Stella981
2年前
Javascript验证上传图片大小[前台处理]
需求分析:在做上传图片的时候,如果不限制上传图片大小,后果非常的严重。那么我们怎样才可以解决一个棘手的问题呢?有两种方式:1)后台处理:也就是AJAXPOST提交到后台,把图片上传到服务器上,然后获得该图片大小做处理。2)前台处理:也就是利用Javascript获取该图片大小。显然第一种方式,很不好。因为需要把文件先上传到
Stella981 Stella981
2年前
Spring Boot 2.x基础教程:实现文件上传
文件上传的功能实现是我们做Web应用时候最为常见的应用场景,比如:实现头像的上传,Excel文件数据的导入等功能,都需要我们先实现文件的上传,然后再做图片的裁剪,excel数据的解析入库等后续操作。今天通过这篇文章,我们就来一起学习一下如何在SpringBoot中实现文件的上传。动手试试第一步:创建一个基础的SpringBo
Stella981 Stella981
2年前
JodConvert3.0 线程化转换 office系列(一)
    在最近的项目中遇到问题,用户要上传office系列文档到项目中,然后我们要进行预览,那么问题来了,现在的word之类的是不支持预览的,2007以后的版本还行,03就是完全不行的。于是我去网上找资料,大谷歌是无敌的,大中国是要翻墙的......搜到了一些相关资料jodconvertopenofficeswftools