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


相关推荐

  • java jersey使用总结_Java Jersey2使用总结

    java jersey使用总结_Java Jersey2使用总结前言在短信平台一期工作中,为便于移动平台的开发,使用了JavaJersey框架开发RESTFul风格的WebService接口。在使用的过程中发现了一些问题并积累了一些项目经验,做了一下总结,便于个人成长,同时也希望对有需要的同仁有好的借鉴和帮助。简介Jersey是JAX-RS(JSR311)开源参考实现用于构建RESTfulWebservice,它包含三个部分:核心服务器(CoreS…

    2022年7月12日
    12
  • [Python_3] Python 函数 & IO

    [Python_3] Python 函数 & IO

    2021年6月15日
    123
  • 用GDB调试程序(一)

    用GDB调试程序(一)

    2021年12月10日
    50
  • Gamma校正原理及python实现

    Gamma校正原理及python实现Gamma校正原理:  假设图像中有一个像素,值是200,那么对这个像素进行校正必须执行如下步骤:  1.归一化:将像素值转换为0~1之间的实数。算法如下:(i+0.5)/256这里包含1个除法和1个加法操作。对于像素A而言,其对应的归一化值为0.783203。  2.预补偿:根据公式,求出像素归一化后的数…

    2022年9月22日
    0
  • dz论坛数据库php网址,discuz论坛更换域名,搬家步骤

    dz论坛数据库php网址,discuz论坛更换域名,搬家步骤搬家步骤具体如下:1、打包数据库文件保存到本地。2、打包网站根目录所有程序(discuz)保存到本地。3、上传网站程序包和数据库包到新的空间,将数据库上传到新的服务器中。4、找到config\config_global.php文件,修改以下3处内容:$_config[‘db‘][‘1‘][‘dbuser‘]=‘数据库用户名‘;$_config[‘db‘][‘1‘][‘dbpw‘]=‘数…

    2022年7月25日
    9
  • libcrypto yum 安装_centos,_缺少libcrypto.so.10,怎么修复,centos – phpStudy

    libcrypto yum 安装_centos,_缺少libcrypto.so.10,怎么修复,centos – phpStudy缺少libcrypto.so.10,怎么修复早上在linodevps上执行了下面两条命令:rpm-e–nodepsopenssl-devel-1.0.1e-42.el6.x86_64rpm-e–nodepsopenssl-1.0.1e-42.el6.x86_64然后重启了服务器现在无法使用ssh连接服务器,现在只能用linode的RemoteAccessLishConsole…

    2022年6月18日
    54

发表回复

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

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