zoukankan      html  css  js  c++  java
  • iOS开发-网络篇 文件的上传

    iOS开发网络篇—文件的上传

    iOS开发网络篇—文件的上传

    说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中。本文介绍如何不借助第三方框架实现iOS开发中得文件上传。

      由于过程较为复杂,因此本文只贴出部分关键代码。

    主控制器的关键代码:

    YYViewController.m

    复制代码
     1 #import "YYViewController.h"
     2 
     3 #define YYEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]
     4 
     5 @interface YYViewController ()
     6 
     7 @end
     8 
     9 @implementation YYViewController
    10 
    11 - (void)viewDidLoad
    12 {
    13     [super viewDidLoad];
    14     // Do any additional setup after loading the view, typically from a nib.
    15 }
    16 
    17 - (void)upload:(NSString *)name filename:(NSString *)filename mimeType:(NSString *)mimeType data:(NSData *)data parmas:(NSDictionary *)params
    18 {
    19     // 文件上传
    20     NSURL *url = [NSURL URLWithString:@"http://192.168.1.200:8080/YYServer/upload"];
    21     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    22     request.HTTPMethod = @"POST";
    23     
    24     // 设置请求体
    25     NSMutableData *body = [NSMutableData data];
    26     
    27     /***************文件参数***************/
    28     // 参数开始的标志
    29     [body appendData:YYEncode(@"--YY
    ")];
    30     // name : 指定参数名(必须跟服务器端保持一致)
    31     // filename : 文件名
    32     NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name="%@"; filename="%@"
    ", name, filename];
    33     [body appendData:YYEncode(disposition)];
    34     NSString *type = [NSString stringWithFormat:@"Content-Type: %@
    ", mimeType];
    35     [body appendData:YYEncode(type)];
    36     
    37     [body appendData:YYEncode(@"
    ")];
    38     [body appendData:data];
    39     [body appendData:YYEncode(@"
    ")];
    40     
    41     /***************普通参数***************/
    42     [params enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
    43         // 参数开始的标志
    44         [body appendData:YYEncode(@"--YY
    ")];
    45         NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name="%@"
    ", key];
    46         [body appendData:YYEncode(disposition)];
    47 
    48         [body appendData:YYEncode(@"
    ")];
    49         [body appendData:YYEncode(obj)];
    50         [body appendData:YYEncode(@"
    ")];
    51     }];
    52     
    53     /***************参数结束***************/
    54     // YY--
    
    55     [body appendData:YYEncode(@"--YY--
    ")];
    56     request.HTTPBody = body;
    57     
    58     // 设置请求头
    59     // 请求体的长度
    60     [request setValue:[NSString stringWithFormat:@"%zd", body.length] forHTTPHeaderField:@"Content-Length"];
    61     // 声明这个POST请求是个文件上传
    62     [request setValue:@"multipart/form-data; boundary=YY" forHTTPHeaderField:@"Content-Type"];
    63     
    64     // 发送请求
    65     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
    66         if (data) {
    67             NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
    68             NSLog(@"%@", dict);
    69         } else {
    70             NSLog(@"上传失败");
    71         }
    72     }];
    73 }
    74 
    75 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    76 {
    77     // Socket 实现断点上传
    78     
    79     //apache-tomcat-6.0.41/conf/web.xml 查找 文件的 mimeType
    80 //    UIImage *image = [UIImage imageNamed:@"test"];
    81 //    NSData *filedata = UIImagePNGRepresentation(image);
    82 //    [self upload:@"file" filename:@"test.png" mimeType:@"image/png" data:filedata parmas:@{@"username" : @"123"}];
    83     
    84     // 给本地文件发送一个请求
    85     NSURL *fileurl = [[NSBundle mainBundle] URLForResource:@"itcast.txt" withExtension:nil];
    86     NSURLRequest *request = [NSURLRequest requestWithURL:fileurl];
    87     NSURLResponse *repsonse = nil;
    88     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&repsonse error:nil];
    89     
    90     // 得到mimeType
    91     NSLog(@"%@", repsonse.MIMEType);
    92     [self upload:@"file" filename:@"itcast.txt" mimeType:repsonse.MIMEType data:data parmas:@{
    93                                                                                               @"username" : @"999",
    94                                                                                               @"type" : @"XML"}];
    95 }
    96 
    97 @end
    复制代码

    补充说明:

    文件上传请求数据格式

    部分文件的MIMEType

  • 相关阅读:
    Construct Binary Tree from Preorder and Inorder Traversal
    Construct Binary Tree from Inorder and Postorder Traversal
    Maximum Depth of Binary Tree
    Sharepoint 2013 创建TimeJob 自动发送邮件
    IE8 不能够在Sharepoint平台上在线打开Office文档解决方案
    TFS安装与管理
    局域网通过IP查看对方计算机名,通过计算机名查看对方IP以及查看在线所有电脑IP
    JS 隐藏Sharepoint中List Item View页面的某一个字段
    SharePoint Calculated Column Formulas & Functions
    JS 两个一组数组转二维数组
  • 原文地址:https://www.cnblogs.com/dingjianjaja/p/5015190.html
Copyright © 2011-2022 走看看