Content-Type = multipart/form-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
其中
name 即为表单请求字段(服务端要的参数字段),fileName为保存在服务端的文件名字,Content-Type为文件类型(image/png 或者video/mpeg4等等),具体可以查看Content-Type参照表
这里着重说下即使服务端要参数是int类型,这里也必须普通参数也必须是字符串对象
#define TEST_FORM_BOUNDARY @"test1234"
#define BMEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]
-(void)sendPost:(NSString*)urlStr Paramater:(NSDictionary*)para data:(NSData*)data name:(NSString*)fileName andContentType:(NSString *)cotentype
{
NSMutableData *dataM = [NSMutableDatadata];
/* 普通参数*/
[para enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL *_Nonnull stop) {
NSString *boundry = [NSStringstringWithFormat:@"--%@\r\n",TEST_FORM_BOUNDARY];
[dataM appendData:BMEncode(boundry)];
NSString *disposition = [NSStringstringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n",key];
NSLog(@"%@",disposition);
[dataM appendData:BMEncode(disposition)];
[dataM appendData:BMEncode(@"\r\n")];
[dataM appendData:BMEncode(obj)];
[dataM appendData:BMEncode(@"\r\n")];
}];
/* 普通参数*/
/* 文件参数*/
if(data&&data.length>0)
{
NSString *boundry = [NSStringstringWithFormat:@"--%@\r\n",TEST_FORM_BOUNDARY];
[dataM appendData:BMEncode(boundry)];
NSString *disposition=[NSStringstringWithFormat:@"Content-Disposition:form-data; name=\"uploadfile\"; filename=\"%@\"\r\nContent-Type: %@\r\n\r\n",fileName,cotentype];
NSLog(@"%@",disposition);
[dataM appendData:BMEncode(disposition)];
[dataM appendData:data];
[dataM appendData:BMEncode(@"\r\n")];
}
/* 文件参数*/
//尾部的分隔符
NSString *strBottom = [NSStringstringWithFormat:@"--%@--\r\n",TEST_FORM_BOUNDARY];
[dataM appendData:BMEncode(strBottom)];
NSURL *url = [NSURLURLWithString:urlStr];
NSMutableURLRequest *request = [[NSMutableURLRequestalloc]initWithURL:url];
[request setValue:@"ZYB" forHTTPHeaderField:@"User-Agent"];
[request setValue:@"max-age=7200" forHTTPHeaderField:@"Cache-Control"];
//设置上传数据的长度及格式
[request setValue:[NSStringstringWithFormat:@"multipart/form-data; boundary=%@",TEST_FORM_BOUNDARY]forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSStringstringWithFormat:@"%lu",(unsignedlong)dataM.length]forHTTPHeaderField:@"Content-Length"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:dataM];
//创建会话
NSURLSession *session = [NSURLSessionsharedSession];
NSURLSessionUploadTask *updataTask = [sessionuploadTaskWithRequest:requestfromData:dataM completionHandler:^(NSData *_Nullable data, NSURLResponse *_Nullable response, NSError * _Nullable error) {
if (!error) {
NSLog(@"response:%@",response);
NSString *dataStr = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];
NSLog(@"dataStr:%@",dataStr);
}else{
NSLog(@"error:%@",error);
}
}];
[updataTask resume];
}