最近研究了下iOS post多文件上传和java web后台的交互。
有http协议基础的同学,相信理解起来不难。
iOS多文件post上传代码:
/**
* 多文件上传
*
* @param keyName 服务器需要识别的 获取文件的名称userfile[]
* @param filesDict 文件上传的字典 。key = 文件的名字,value =文件的路径
* @param parmaters 文本字典 key =参数名 ,value = 参数值
*/
-(NSData *)getHttpBodWithKeyName:(NSString *)keyName andFiles:(NSDictionary *)filesDict andParmaters:(NSDictionary *)parmaters
{
//循环头部信息
// -----------------------------2079310075963042894277672019
// Content-Disposition: form-data; name="userfile[]"; filename="test.rtf"
// Content-Type: application/octet-stream 通用类型
NSMutableData * data=[NSMutableData data];
[filesDict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
NSString * fileName=key;
NSString * filePath=obj;
//获得后缀名..
//fileName = [NSString stringWithFormat:@"%@.%@",fileName,[filePath lastPathComponent]];
NSMutableString * headerString=[NSMutableString stringWithFormat:@"\r\n--%@\r\n",KBoundary];
NSString * type=[NSString stringWithFormat:@"Content-Disposition: form-data;name=%@; filename=%@\r\n",keyName,fileName];
[headerString appendString:type];
//使用通用类型的方法 application/octet-stream
[headerString appendFormat:@"Content-Type: application/octet-stream\r\n\r\n"];
[data appendData:[headerString dataUsingEncoding:NSUTF8StringEncoding]];
//创建文件内容
NSData * fileData=[NSData dataWithContentsOfFile:filePath];
[data appendData:fileData];
}];
//获取文本信息
[parmaters enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
//文件格式
// -----------------------------2079310075963042894277672019
// Content-Disposition: form-data; name="username"
//
// 文本内容
NSString * parmaterKey=key;
NSString * parmaterValue=obj;
NSMutableString * textStr=[NSMutableString stringWithFormat:@"\r\n--%@\r\n",KBoundary];
[textStr appendFormat:@"Content-Disposition: form-data;name=%@\r\n\r\n",parmaterKey];
[data appendData:[textStr dataUsingEncoding:NSUTF8StringEncoding]];
//文本内容
NSData * msgData=[parmaterValue dataUsingEncoding:NSUTF8StringEncoding];
[data appendData:msgData];
}];
//加入尾部
NSMutableString * footerString=[NSMutableString stringWithFormat:@"\r\n--%@--",KBoundary];
[data appendData:[footerString dataUsingEncoding:NSUTF8StringEncoding]];
return data;
}