iOS多文件post上传

12 篇文章 0 订阅
10 篇文章 0 订阅

最近研究了下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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值