无标题文章

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

、、、

/** * 上传图文 */- (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就是文本所对应的字段了,我们这里是只设置了图片的类型,

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • iOS 上传图片到服务器 1.单张图片上传 //上传图片(单张)+(void)uploadPhotoAndCont...
    润晴天阅读 2,713评论 0 0
  • AFNetworking是一个非常方便的网络请求库,可以轻松实现各种网络请求,比如经常使用的GET请求、POST请...
    小新xin阅读 1,234评论 0 0
  • # MVC ​框架的所有代码结构整合都是采用MVC的基础架构,这也是苹果iOS系统的基本架构。Controller...
    keldonwang阅读 2,669评论 0 0
  • 报错:[UICollectionView _endItemAnimationsWithInvalidationCo...
    思考搜索决策勇敢阅读 2,087评论 0 0
  • 事情的起因还是因为项目需求驱动。折腾了两天,由于之前没有UIWebView与JS交互的经历,并且觉得这次在功能上有...
    嘿我回来了阅读 2,118评论 0 0

友情链接更多精彩内容