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


相关推荐

  • 七彩虹智能主板设置U盘启动教程

    七彩虹智能主板设置U盘启动教程不同的电脑品牌主板进入 bios 的启动快捷键不同 在借助 u 盘安装系统的时候 我们经常会需要进 bios 调整 u 盘启动 有些网友不清楚七彩虹智能主板如何设置 u 盘启动 下面就给大家讲下七彩虹智能主板设置 U 盘启动教程 操作步骤 1 电脑开机后马上快速间断的按 Del 热键 一般左右下方有英文提示 如下图 2 键盘方向键往右移到 Boot 菜单上 下图 3 在 Boot 界面方向键往下移到 BootOption 1 上面按 enter 回车 4 然后选择 U 盘选项 按回车 5 接着按键盘上面的

    2025年11月6日
    4
  • python远程调试_pycharm远程调试linux服务器python项目

    python远程调试_pycharm远程调试linux服务器python项目python 开发的一个重要事项是包管理 想想那么多负责的包 如果没有好的包管理系统 在本机搭建一个包环境是多么复杂 于是放弃了本地构建包的想法 使用远程包 也就是使用项目部署已经搭建完好的生产环境 在本地通过调用远程生产系统进行项目代码调试 pycharm 作为一款强大的 IDE 很好的实现了这个功能 在 pycharm 中 可以使用 ssh 来配置 linux 系统中的环境作为项目环境 也可以同步项目代码 一

    2025年10月9日
    6
  • squid反向代理

    squid反向代理

    2021年5月28日
    111
  • pycharm安装包出现错误

    pycharm安装包出现错误提示:Youshouldconsiderupgradingviathe’e:\programfiles\python37\python.exe-mpipinstall–upgradepip’command.这一类问题,其实就是你的pip版本低了,只需要输入命令python-mpipinstall–upgradepip升级即可。

    2022年5月13日
    48
  • Java中的数据类型详解——boolean类型

    Java中的数据类型详解——boolean类型BooleanTest01.java/* 1、在java语言中boolean类型只有两个值,没有其他值: true和false。 不像c或者c++,c语言中1和0也可以表示布尔类型。 2、boolean类型在实际开发中使用在哪里呢? 使用在逻辑判断当中,通常放在条件的位置上(充当条件)。*/publicclassBooleanTest01{ publicstaticvoidmain(String[]args){ //错误:不兼容的类型:int无法转换为boole

    2022年7月8日
    65
  • Hibernate、Spring和Struts工作原理及使用理由

    Hibernate、Spring和Struts工作原理及使用理由

    2021年8月8日
    44

发表回复

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

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