• 网络编程练习 -- 文件上传


    LWTViewController.m

    //
    //  LWTViewController.m
    //  网络编程练习 -- 文件上传
    //
    //  Created by apple on 14-6-30.
    //  Copyright (c) 2014年 lwt. All rights reserved.
    //
    
    #import "LWTViewController.h"
    #define KStringToData(string) [string dataUsingEncoding:NSUTF8StringEncoding]
    
    @interface LWTViewController ()
    
    @end
    
    @implementation LWTViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    }
    
    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        // 获取文件类型和data
        NSURL *imageUrl = [[NSBundle mainBundle] URLForResource:@"test.png" withExtension:nil];
        NSURLRequest *imageRequest = [NSURLRequest  requestWithURL:imageUrl];
        NSURLResponse *response = nil;
        NSData *data = [NSURLConnection sendSynchronousRequest:imageRequest returningResponse:&response error:nil];
        NSString *mimeType = response.MIMEType;
        
        [self upload:@"file" fileName:@"test.png" mimeType:mimeType data:data params:@{
                                                                                       @"username" : @"999",
                                                                                       @"type" : @"XML"
                                                                                       }];
        
        
        
    }
    
    - (void)upload: (NSString *)name fileName:(NSString *)fileName mimeType:(NSString *)mimeType data:(NSData *)data params :(NSDictionary *)params
    {
        // 文件上传
        NSURL *url = [NSURL URLWithString:[@"http://192.168.1.24:8080/MJServer/upload" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        request.HTTPMethod = @"POST";
        
        
        
        // 设置请求体
        NSMutableData *body = [NSMutableData data];
        
        /***************文件参数***************/
        // 参数开始的标志
        [body appendData:KStringToData(@"--upload
    ")];
        // name : 指定参数名(必须跟服务器端保持一致)
        // filename : 文件名
        NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name="%@"; filename="%@"
    ", name, fileName];
        [body appendData:KStringToData(disposition)];
        
        NSString *str = [NSString stringWithFormat:@"Content-Type: %@
    ", mimeType];
        [body appendData:KStringToData(str)];
        
        [body appendData:KStringToData(@"
    ")];
        [body appendData:data];
        [body appendData:KStringToData(@"
    ")];
        
        /***************普通参数***************/
        [body appendData:KStringToData(@"--upload
    ")];
        [params enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
            [body appendData:KStringToData(@"--upload
    ")];
            NSString *dispos = [NSString stringWithFormat:@"Content-Disposition: form-data; name="%@"
    ", key];
            [body appendData:KStringToData(dispos)];
            [body appendData:KStringToData(@"
    ")];
            [body appendData:KStringToData(obj)];
            [body appendData:KStringToData(@"
    ")];
        }];
        
        [body appendData:KStringToData(@"--heima--
    ")];
        request.HTTPBody = body;
        
        // 设置请求头
        // 请求体的长度
        [request setValue:[NSString stringWithFormat:@"%zd", body.length] forHTTPHeaderField:@"Content-Length"];
        // 声明这个POST请求是个文件上传
        [request setValue:@"multipart/form-data; boundary=upload" forHTTPHeaderField:@"Content-Type"];
        
        // 发送请求
        [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
            if (data) {
                NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
                NSLog(@"%@", dict);
            } else {
                NSLog(@"上传失败");
            }
        }];
    }
    @end
    View Code
  • 相关阅读:
    岭回归和LASSO
    涉及到的知识点有页连接符的使用、批量修改元器件属性等知识
    OrCAD中分立器件的Symbol绘制
    OrCAD来新建原理图工程、设置原理图页面、新建原理图库
    python控制TLP2041高压电源源码(modbus rtu,try捕获异常使用)
    pyqt5分离ui主线程到子线程
    modbus rtu协议
    pcb接地设计
    PSPICE参数扫描+光标跟踪曲线改变+窗口分多个坐标系
    ad 导入logo
  • 原文地址:https://www.cnblogs.com/wentianblog/p/3820771.html
Copyright © 2020-2023  润新知