zoukankan      html  css  js  c++  java
  • 课堂笔记—— post 上传

    - (void)btnLoad_Touch:(id)sender {

        // 接收文件上传的地址

        NSString *urlString = @"http://localhost/BookReaderData/UploadFileWithPost.php";

        

        // 要上传的文件的文件名

        NSString *folder = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

        NSString *fileName = [folder stringByAppendingPathComponent:@"img3.jpg"];

        NSLog(@"Post filename is %@", fileName);  /**fileName设置为上传文件的文件名(可以虚构)**/

        

        

        

        // 服务器端上传表单项的名称,一定与服务器端接收文件的名一致

        NSString *uploadInputFieldName = @"file";  /**将file改为上传文件的参数名**/

        

        // 要传递的POST的参数,其中file对应上传文件的文件名

        NSDictionary *params = @{

                                 uploadInputFieldName: fileName,

                                 @"key1": @"Value1"                 // 其他要POST传递的参数

                                 };

        

        

        /******文件转为NSData*******/

        //要上传的文件

        NSString *imageFileName = [params objectForKey:uploadInputFieldName];

        

        //得到图片的data

        NSData* data = [NSData dataWithContentsOfFile:imageFileName];/**NSData是上传文件的二进制内容**/

        /*************************/

        

        

        

        

        /*********************以上按需要修改,下面的代码为固定代码,一般不需要修改*************************/

        

        

        //分界线的标识符

        NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x";

        //根据url初始化request

        NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]

                                                               cachePolicy:NSURLRequestReloadIgnoringLocalCacheData

                                                           timeoutInterval:10];

        //分界线 --AaB03x

        NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY];

        //结束符 AaB03x--

        NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary];

        

        

        

        

        

        

        

        

        

        

        //http body的字符串

        NSMutableString *body=[[NSMutableString alloc]init];

        //参数的集合的所有key的集合

        NSArray *keys= [params allKeys];

        

        //遍历keys

        for(int i=0;i<[keys count];i++)

        {

            //得到当前key

            NSString *key=[keys objectAtIndex:i];

            //如果key不是pic,说明value是字符类型,比如name:Boris

            if(![key isEqualToString:uploadInputFieldName])

            {

                //添加分界线,换行

                [body appendFormat:@"%@ ",MPboundary];

                //添加字段名称,换2行

                [body appendFormat:@"Content-Disposition: form-data; name="%@" ",key];

                //添加字段的值

                [body appendFormat:@"%@ ",[params objectForKey:key]];

            }

        }

        

        ////添加分界线,换行

        [body appendFormat:@"%@ ",MPboundary];

        //声明pic字段,文件名为boris.png

        [body appendFormat:@"Content-Disposition: form-data; name="%@"; filename="%@" ", uploadInputFieldName, fileName];

        //声明上传文件的格式

        [body appendFormat:@"Content-Type: image "];

        

        //声明结束符:--AaB03x--

        NSString *end=[[NSString alloc]initWithFormat:@" %@",endMPboundary];

        //声明myRequestData,用来放入http body

        NSMutableData *myRequestData=[NSMutableData data];

        //将body字符串转化为UTF8格式的二进制

        [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];

        //将image的data加入

        [myRequestData appendData:data];

        //加入结束符--AaB03x--

        [myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];

        

        //设置HTTPHeader中Content-Type的值

        NSString *content=[[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY];

        //设置HTTPHeader

        [request setValue:content forHTTPHeaderField:@"Content-Type"];

        //设置Content-Length

        [request setValue:[NSString stringWithFormat:@"%ld", [myRequestData length]] forHTTPHeaderField:@"Content-Length"];

        //设置http body

        [request setHTTPBody:myRequestData];

        //http method

        [request setHTTPMethod:@"POST"];

        

        

        /**********************************/

        

        

        NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

        

        NSURLSessionDataTask *dataTash = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

            

            if (error) {

                NSLog(@"%@", error);

            }

            else {

                NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

                NSLog(@"Response is %@", responseString);

            }

        }];

        [dataTash resume];

    }

  • 相关阅读:
    golang 相关
    ES root用户启动失败can not run elasticsearch as root
    基于 Flink CDC + Hudi 湖仓一体方案实践
    数据平台上云
    多云趋势
    数果实时数仓探索
    宽表的设计
    数仓指标体系
    Hudi在医疗大数据的应用
    Hudi on Flink上手使用总结
  • 原文地址:https://www.cnblogs.com/fanwenzheIOS/p/4922560.html
Copyright © 2011-2022 走看看