首页 > 技术文章 > POST单文件上传

xhc1263478959 2015-09-15 09:29 原文

1.单个文件上传(四个步骤) 2.设置请求体格式

{

    为什么要上传文件:

    

    - 以前很多服务器对上传文件的大小有限制,PHP 限制是 2M

    - 目前很多服务器不仅不限制大小,而且鼓励上传多个文件!

    - 云服务器的普及!

    - 软件商希望获得更多的用户数据!

    

    提示:abc 的目录是用来保存上传文件的,需要设置访问权限!

    

    <1> 文件上传使用 POST 方法.

    

    // 请求为可变请求

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    // 制定请求方法为 POST

    request.HTTPMethod = @"POST";

    

    <2> 设置请求头,告诉服务器请求体中的内容包含文件参数.

    [request setValue:@"multipart/form-data; boundary=kBoundary" forHTTPHeaderField:@"Content-Type"];

    

    <3> 设置请求体(注意:必须严格按照格式设置).

    {

        // 上边界

        --boundary\r\n

        Content-Disposition: form-data; name=userfile; filename=555\r\n

        Content-Type: application/json\r\n\r\n

        

        

        文件内容的二进制数据

        

        // 下边界

        \r\n--boundary--

        

        

        注意1:请求体内容分为三个部分:

        

        * 上边界部分,告诉服务器要做数据上传,包含了服务器的接收字段name=userfile,文件在服务器中保存的名称filename=555,以及上传文件的数据类型 application/json(需要严格按照字符串格式来设置)

        

        * 上传文件的数据部分(二进制数据)

        

        * 下边界部分,严格按照字符串格式来设置.

        

        上边界部分和下边界部分的字符串,最后都要转换成二进制数据,和文件部分的二进制数据拼接在一起,作为请求体发送给服务器.

        

        

        注意2:

    

        * userfile => 负责上传文件脚本中的 字段名,开发的时候,可以咨询后端程序员

        * filename => 将文件保存在服务器上的文件名称

        * Content-Type: 客户端告诉服务器上传文件的文件类型

        

        注意3:

        

        * 每一行末尾需要有一定的 \r\n

        * 提示:有些服务器可以直接使用 \n,但是新浪微博如果使用 \n 上传文件,服务器会返回没有权限的错误!

        

    }

    

    <4> 发送请求( NSURLConnection异步发送请求)

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

        //

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

        

        NSLog(@"%@",string);

    }];

    

}

推荐阅读