您的位置:首页 > 理论基础 > 计算机网络

网络处理文件上传、获取文件MIMEType、其他HTTP请求方式

2013-10-01 18:33 405 查看
//文件上传底层原理分析
#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 同步请求-获取文件的MIMEType
- (void)getType {
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/yyh.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)post2 {
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/yyh.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 每发送一段数据给服务器,就会调用这个方法。这个方法可以用来监听文件上传进度
- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite {

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐