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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • printwriter用法_stylewriter使用教程

    printwriter用法_stylewriter使用教程OutPutStream可以被封装成PrintWriter,OutputStream比较底层一些,是以字节为单位传输的,而PrintWriter是以字符为单位输出,所以就会涉及到转码编码的问题,如果用PrintWriter发送char[]和byte[],在服务端收到的常常是有一些字符会失真.PrintWriter以字符为单位,支持汉字,OutPutStream则不行总结:处理

    2022年8月10日
    4
  • pythoncharm注释快捷键_jsp注释快捷键

    pythoncharm注释快捷键_jsp注释快捷键常用的快捷键1.设置(ctrl+alt+s)2.快速创建文件(alt+insert)3.自动格式化(ctrl+alt+l)4.快速注释代码(ctrl+/)5.快速取消注释代码(ctrl+/)6.复制一行代码(ctrl+d)7.撤销操作(ctrl+z)常用的注释方式1.单行注释使用#2.多行注释使用三引号“””“””…

    2022年8月28日
    3
  • 挖矿病毒分析[通俗易懂]

    挖矿病毒分析[通俗易懂]病毒样本分析样本要求确定二进制文件类型给出钱包地址的IOC特征文件类型:PE64脱壳upx.exe-dsvhostd.jpg.virus钱包地址的IOC特征云沙箱自动分析

    2022年4月27日
    44
  • Harris角点学习[通俗易懂]

    Harris角点学习[通俗易懂]人们普遍认为角点是二维图像亮度变化剧烈的点或图像边缘曲线上曲率极大值的点。这些点在保留图像图形重要特征的同时,可以有效地减少信息的数据量,使其信息的含量很高,有效地提高了计算的速度,有利于图像的可靠匹配,使得实时处理成为可能。其在三维场景重建、运动估计、目标跟踪、目标识别、图像配准与匹配等计算机视觉领域起着非常重要的作用。  角点的检测主要有两类基于图像边缘的方法和基于图像灰度的方法。前者很

    2022年9月25日
    4
  • Vista/Win7 使用Vista Loader激活后的 Windows/Linux双启动解决方案

    Vista/Win7 使用Vista Loader激活后的 Windows/Linux双启动解决方案Windows与Linux的双启动,一般使用Grub4Dos(以下简称Grub)来作双启动的工具。自从使用VistaLoader来“软改”bios来激活Vista/Win7后

    2022年7月3日
    41
  • oracle认证考试培训_认证培训

    oracle认证考试培训_认证培训Ocp认证指的是Oracle库认证专家,属于Oracle中级认证,考取该项资格认证说明你已经具备了库中级技术水平。1、市场占有率和技术占有率高Oracle目前是全球大的企业软件公司,前100强企业当

    2022年8月3日
    10

发表回复

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

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