异步 同步 文件上传 监听文件上传进度

在.h文件中 使用NSURLConnectionDataDelegate协议


在.m文件 

#define Data(str) [str dataUsingEncoding:NSUTF8StringEncoding]  //宏定义

// username
// file
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    [self post2];
}

#pragma mark 异步请求
- (void)post2 {
    NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/备课.txt"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    
    // 这个操作队列是用来执行Block的
    NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease];
    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:
     // 请求结束后会回调这个Block
     ^(NSURLResponse *response, NSData *data, NSError *error) {
         NSString *str = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
         
         NSLog(@"%@", str);
         
         NSLog(@"%@", [response MIMEType]);
    }];
}

#pragma mark 同步请求-获取文件的MIMEType
- (void)getType {

//本地文件路径

    NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/备课.txt"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 发送一个同步请求
    NSURLResponse *response = nil;
    
    // 发送一个同步请求
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
    
    NSString *type = [response MIMEType];
    NSString *str = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
    
    NSLog(@"%@", str);
    NSLog(@"%@", type);
}


#pragma mark 文件上传
- (void)upload {
    NSURL *url = [NSURL URLWithString:@"http://192.168.1.106:8080/MJServer/upload"];
    
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"POST";  //请求方法
    
    // 设置请求头信息-数据类型
    [request setValue:@"multipart/form-data; boundary=mj" forHTTPHeaderField:@"Content-Type"];
    
    // 拼接请求体
    NSMutableData *data = [NSMutableData data];
    
    // 普通参数-username
    // 普通参数开始的一个标记
    [data appendData:Data(@"--mj\r\n")];
    // 参数描述
    [data appendData:Data(@"Content-Disposition:form-data; name=\"username\"\r\n")];
    // 参数值
    [data appendData:Data(@"\r\n123456\r\n")];
    
    
    // 文件参数-file
    // 文件参数开始的一个标记
    [data appendData:Data(@"--mj\r\n")];
    // 文件参数描述
    [data appendData:Data(@"Content-Disposition:form-data; name=\"file\"; filename=\"img.png\"\r\n")];
    // 文件的MINETYPE
    [data appendData:Data(@"Content-Type:image/png\r\n")];
    // 文件内容
    [data appendData:Data(@"\r\n")];
    UIImage *image = [UIImage imageNamed:@"Default.png"];
    NSData *filedata = UIImagePNGRepresentation(image);
    [data appendData:filedata];
    [data appendData:Data(@"\r\n")];
    
    // 参数结束的标识
    [data appendData:Data(@"--mj--")];
    
    // 设置请求体
    request.HTTPBody = data;
    
    [[NSURLConnection connectionWithRequest:request delegate:nil] start];
}

#pragma mark 每发送一段数据给服务器,就会调用这个方法。这个方法可以用来监听文件上传进度
- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite {
}

你可能感兴趣的:(iOS)