zoukankan      html  css  js  c++  java
  • post上传文件

    //
    //  ViewController.m
    //  02-POST
    //
    //  Created by jerry on 15/10/9.
    //  Copyright (c) 2015年 jerry. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "NSMutableURLRequest+Muitipart.h"
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        [self postUpLoad];
    }
    
    
    - (void)postUpLoad
    {
        // url
        NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/post/upload.php"];
        
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithUrl:url andLoaclFilePath:[[NSBundle mainBundle] pathForResource:@"111.png" ofType:nil] andFileName:@"123.png"];
        // connection
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
            // 反序列化的一个处理
            id result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
            NSLog(@"%@",result);
        }];
    }
    @end

    NSMutableURLRequest的分类:

    .h

    //
    //  NSMutableURLRequest+Muitipart.h
    //  02-POST
    //
    //  Created by jerry on 15/10/10.
    //  Copyright (c) 2015年 jerry. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface NSMutableURLRequest (Muitipart)
    /**
     *  类方法
     *
     *  @param url          要上传的服务器地址
     *  @param loadFilePath 要上传的文件全路径
     *  @param fileName     保存到服务器的名称。
     * 
     */
    + (instancetype)requestWithUrl:(NSURL *)url andLoaclFilePath:(NSString *)loadFilePath andFileName:(NSString *)fileName;
    @end

    .m

    //
    //  NSMutableURLRequest+Muitipart.m
    //  02-POST
    //
    //  Created by jerry on 15/10/10.
    //  Copyright (c) 2015年 jerry. All rights reserved.
    //
    
    #import "NSMutableURLRequest+Muitipart.h"
    static NSString *boundary = @"ZPUpLoad";
    @implementation NSMutableURLRequest (Muitipart)
    + (instancetype)requestWithUrl:(NSURL *)url andLoaclFilePath:(NSString *)loadFilePath andFileName:(NSString *)fileName
    {
        // request
    #warning -- 这里不是NSURLRequest   而是   NSMutableURLRequest  因为这个请求是可变请求。
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:2.0f];
        // 声明是哪种格式的请求,默认是GET。
        request.HTTPMethod = @"POST";
        /**
         
    --(可以随便写, 但是不能有中文)
    
         Content-Disposition: form-data; name="userfile(php脚本中用来读取文件的字段)"; filename="demo.json(要保存到服务器的文件名)"
    
         Content-Type: application/octet-stream(上传文件的类型)
    
    
         
    --(可以随便写, 但是不能有中文)
    
         
         */
        // 数据体  拼接数据体
        NSMutableData *dataM = [NSMutableData data];
        // 1. 
    --(可以随便写, 但是不能有中文)
    
        NSString *str = [NSString stringWithFormat:@"
    --%@
    ",boundary];
        [dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
        
        // 2. Content-Disposition: form-data; name="userfile(php脚本中用来读取文件的字段)"; filename="demo.json(要保存到服务器的文件名)"
    
        str = [NSString stringWithFormat:@"Content-Disposition: form-data; name="userfile"; filename="%@" 
    ", fileName];
        
        [dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
        
        // 3.Content-Type: application/octet-stream(上传文件的类型)
    
    
        str = @"Content-Type: application/octet-stream
    
    ";
        [dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
        
        // 4.要上传文件的二进制流
        
        [dataM appendData:[NSData dataWithContentsOfFile:loadFilePath]];
        
        // 5.
    --(可以随便写, 但是不能有中文)
    
        str = [NSString stringWithFormat:@"
    --%@--
    ",boundary];
        [dataM appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
        
        request.HTTPBody = dataM;
        
        
        /**
         Content-Length(文件的大小)    290
         Content-Type    multipart/form-data; boundary(分隔符)=(可以随便写, 但是不能有中文)
         */
        
        // 设置请求头
        NSString *headerStr = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
        [request setValue:headerStr forHTTPHeaderField:@"Content-Type"];
        return request;
    }
    @end
  • 相关阅读:
    dotnet core 获取 MacAddress 地址方法
    dotnet core 获取 MacAddress 地址方法
    dotnet core 发布只带必要的依赖文件
    dotnet core 发布只带必要的依赖文件
    Developing Universal Windows Apps 开发UWA应用 问答
    Developing Universal Windows Apps 开发UWA应用 问答
    cmd 如何跨驱动器移动文件夹
    cmd 如何跨驱动器移动文件夹
    C++ 驱动开发 error LNK2019
    C++ 驱动开发 error LNK2019
  • 原文地址:https://www.cnblogs.com/pengpengzhang/p/4865761.html
Copyright © 2011-2022 走看看