zoukankan      html  css  js  c++  java
  • 网络处理文件上传、获取文件MIMEType、其他HTTP请求方式

     1 //文件上传底层原理分析
     2 #pragma mark 文件上传
     3 - (void)upload {
     4     NSURL *url = [NSURL URLWithString:@"http://192.168.1.106:8080/MJServer/upload"];
     5     
     6     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
     7     request.HTTPMethod = @"POST";
     8     
     9     // 设置请求头信息-数据类型
    10     [request setValue:@"multipart/form-data; boundary=mj" forHTTPHeaderField:@"Content-Type"];
    11     
    12     // 拼接请求体
    13     NSMutableData *data = [NSMutableData data];
    14     
    15     // 普通参数-username
    16     // 普通参数开始的一个标记
    17     [data appendData:Data(@"--mj
    ")];
    18     // 参数描述
    19     [data appendData:Data(@"Content-Disposition:form-data; name="username"
    ")];
    20     // 参数值
    21     [data appendData:Data(@"
    123456
    ")];
    22     
    23     
    24     // 文件参数-file
    25     // 文件参数开始的一个标记
    26     [data appendData:Data(@"--mj
    ")];
    27     // 文件参数描述
    28     [data appendData:Data(@"Content-Disposition:form-data; name="file"; filename="img.png"
    ")];
    29     // 文件的MINETYPE
    30     [data appendData:Data(@"Content-Type:image/png
    ")];
    31     // 文件内容
    32     [data appendData:Data(@"
    ")];
    33     UIImage *image = [UIImage imageNamed:@"Default.png"];
    34     NSData *filedata = UIImagePNGRepresentation(image);
    35     [data appendData:filedata];
    36     [data appendData:Data(@"
    ")];
    37     
    38     // 参数结束的标识
    39     [data appendData:Data(@"--mj--")];
    40     
    41     // 设置请求体
    42     request.HTTPBody = data;
    43     
    44     [[NSURLConnection connectionWithRequest:request delegate:nil] start];
    45 }
     1 #pragma mark 同步请求-获取文件的MIMEType
     2 - (void)getType {
     3     NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/yyh.txt"];
     4     NSURLRequest *request = [NSURLRequest requestWithURL:url];
     5     
     6     // 发送一个同步请求
     7     NSURLResponse *response = nil;
     8     
     9     // 发送一个同步请求--阻塞式
    10     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
    11     
    12     NSString *type = [response MIMEType];
    13     NSString *str = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
    14     
    15     NSLog(@"%@", str);
    16     NSLog(@"%@", type);
    17 }
     1 #pragma mark 异步请求
     2 - (void)post2 {
     3     NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/yyh.txt"];
     4     NSURLRequest *request = [NSURLRequest requestWithURL:url];
     5 
     6     
     7     // 这个操作队列是用来执行Block的
     8     NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
     9     [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:
    10      // 请求结束后会回调这个Block
    11      ^(NSURLResponse *response, NSData *data, NSError *error) {
    12          NSString *str = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
    13          
    14          NSLog(@"%@", str);
    15          
    16          NSLog(@"%@", [response MIMEType]);
    17     }];
    18 }
    1 #pragma mark 每发送一段数据给服务器,就会调用这个方法。这个方法可以用来监听文件上传进度
    2 - (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite {
    3 
    4 }
  • 相关阅读:
    解决 Cordova 打包 vue项目为 APP 后,在安卓平台下 touchMove 事件不生效的问题
    解决微信内置浏览器里,下拉无法捕获 touchEnd 事件
    记录 React-native 项目中的各种坑坑
    内存型游戏外挂讲解
    浅谈数据抓取的几种方法
    php链表笔记:合并两个有序链表
    php链表笔记:链表的检测
    php链表笔记:单链表反转
    使用UUID和int自增主键的区别
    lumen框架使用Elasticsearch详解
  • 原文地址:https://www.cnblogs.com/yyh123/p/3348679.html
Copyright © 2011-2022 走看看