iOS–表单formdata上传文件

iOS–表单formdata上传文件背景 使用 multipart form data 格式提交图片或者文件到服务器 方法 使用 http 请求 POST 方式 然后在请求头里设置 Content Type 为 multipart from data 指定请求的格式 参数格式 普通参数 boundry r nContent Disposition form data name r n nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp r

背景:使用multipart/form-data格式提交图片或者文件到服务器。

方法:使用http请求POST方式,然后在请求头里设置Content-Type为multipart/from-data指定请求的格式。

参数格式:

普通参数: --boundry\r\n Content-Disposition: form-data; name=\"%@\"\r\n            \r\n value \r\n 文件参数: --boundry\r\n Content-Disposition:form-data; name=\"%@\"; filename=\"%@\"\r\nContent-Type: %@\r\n          \r\n data \r\n 参数结尾: --boundry--\r\n

例子:

服务器要求传参:{”upload”: imgdata, “uid”: uid}

#pragma mark ------ 上传头像 POST /file/uploadHead - (void)uploadHeadImage:(UIImage *)image usrId:(NSString *)usrId onSuccess:(void (^)(NSDictionary *dict))onSuccess onFailure:(void(^)(NSError *error))onFailure { //BaseWebAddr:服务器地址 NSString *urlStr = [BaseWebAddr stringByAppendingString:@"file/uploadHead"]; NSURL *url = [NSURL URLWithString:urlStr]; //在此声明一个字符串常量,代替下面的 BOUNDARY 字符串 // NSString * const POST_BOUNDS = @"----iOSKitFormBoundarycIO0B6mmsXU6koBg"; NSData *imageData; NSString *imageFormat; if (UIImagePNGRepresentation(image) != nil) { imageFormat = @"Content-Type: image/png \r\n"; imageData = UIImagePNGRepresentation(image); }else{ imageFormat = @"Content-Type: image/jpeg \r\n"; imageData = UIImageJPEGRepresentation(image, 1.0); } NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @"POST"; //设置请求实体 NSMutableData *body = [NSMutableData data]; ///文件参数 [body appendData:[self getDataWithString:@"--BOUNDARY\r\n" ]]; NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@.jpg\"\r\n",@"upload",usrId]; [body appendData:[self getDataWithString:disposition ]]; [body appendData:[self getDataWithString:imageFormat]]; [body appendData:[self getDataWithString:@"\r\n"]]; [body appendData:imageData]; [body appendData:[self getDataWithString:@"\r\n"]]; //普通参数 [body appendData:[self getDataWithString:@"--BOUNDARY\r\n" ]]; //上传参数需要key NSString *dispositions = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n",@"uid"]; [body appendData:[self getDataWithString:dispositions ]]; [body appendData:[self getDataWithString:@"\r\n"]]; [body appendData:[self getDataWithString:usrId]]; [body appendData:[self getDataWithString:@"\r\n"]]; //参数结束 [body appendData:[self getDataWithString:@"--BOUNDARY--\r\n"]]; request.HTTPBody = body; //设置请求体长度 NSInteger length = [body length]; [request setValue:[NSString stringWithFormat:@"%ld",length] forHTTPHeaderField:@"Content-Length"]; //设置 POST请求文件上传 [request setValue:@"multipart/form-data; boundary=BOUNDARY" forHTTPHeaderField:@"Content-Type"]; NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { NSJSONSerialization *object = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; NSDictionary *dict = (NSDictionary *)object; NSLog(@"=====%@",[dict objectForKey:@"success"]); }]; //开始任务 [dataTask resume]; } -(NSData *)getDataWithString:(NSString *)string{ NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; return data; }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233602.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 3D游戏建模真的很累吗?前景怎么样?又需要哪样的基础

    3D游戏建模真的很累吗?前景怎么样?又需要哪样的基础所有行业都是一样的,没有什么容易的,只不过这一行是偏向于技术的,一个有好的建模师月薪10k+是很常见的,这个需要有自己刻苦学习的成果。游戏建模前景在游戏模型行业,你基本不用担心找不到工作,因为游戏模型师人才缺口非常大。举个例子:游戏制作公司的人员配比大多数是这样的:比如100人的三维制作组,可能有60人在做模型贴图,10个人在K动画。只要你保证技能在手,一定是抢手的人才。在几年前游戏建模这个行业不仅仅缺人才,甚至连新手都非常稀缺,那个时候公司愿意招聘实习生,培养他们然后给公司干活,但是工资一定不

    2022年5月19日
    47
  • hadoop2.0的datanode数据存储文件夹策略的多个副本

    hadoop2.0的datanode数据存储文件夹策略的多个副本

    2022年1月8日
    42
  • windows10 kms激活_windows10激活密钥在哪

    windows10 kms激活_windows10激活密钥在哪@echooff&setlocalEnableDelayedExpansion&color5etitleKMS_ActivationforWindows10-(Comlan)echo::::::::::::::::::::::::::::::::::::::::::::::::echo::自动检查Win10的版本,导入相应的KMS密钥::echo…

    2025年7月9日
    3
  • macbook air13-inch_苹果笔记本mgn63ch

    macbook air13-inch_苹果笔记本mgn63chMacBookAirMGN63CH/A/MGN93CH/A/MGND3CH/A/MGN73CH/A/MGNA3CH/MGNE3CH/A配置报价图片:https://www.mac.so/macbook-air/MGN63CH/A 7999 深空灰色 全新MacBookAirM1芯片低配 触控ID AppleM1芯片配备8核中央处理器 8GB统一内存 256GB固态硬盘 7核图形处理器 13.3原彩显示2560×160…

    2022年10月6日
    2
  • 用matlab画三维图实例_cad绘制3d图形的教程

    用matlab画三维图实例_cad绘制3d图形的教程文章目录一、引言二、绘制三维空间曲线三、绘制三维空间曲面1.基本概念2.示例(1)3.示例(2)4.等高线的曲面图5.被光照射带阴影的曲面6.图形修饰方法四、绘制等高线一、引言一图胜前言,本篇文章的目的就是绘制这样的三维图形二、绘制三维空间曲线plot3——基本的三维曲线绘制命令调用格式:plot3(x,y,z)——x,y,z是长度相同的向量plot3(X,Y,Z)——X,Y,Z是维数相同的矩阵plot3(x,y,z,’s’)——开关量字符串s用来设定曲线颜色和

    2022年10月11日
    3
  • python京东自动签到领金豆_docker 京东自动签到

    python京东自动签到领金豆_docker 京东自动签到项目紧张的忙完了,早上签到时突然想到自动签到~~’人生苦短,我用python’网上看了下,很简单。对于小白来说,主要难度是环境的搭建。主要用到:1selenium模拟浏览器2chromedriver(chrome驱动)上面网友已经实现飞猪京东签到,依葫芦画瓢嘛,实现了苏宁易购的签到。备注:只是很简单签到代码,没有登录的滑动签到的校验码(第一次登录签到)参照上面的,自己实现了苏宁易购的…

    2022年9月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号