源码0602-10-掌握-文件上传11-了解-获得文件的MIMEType
// // ViewController.m // 10-掌握-文件上传 #define XMGBoundary @"520it" #define XMGEncode(string) [string dataUsingEncoding:NSUTF8StringEncoding] #define XMGNewLine [@"\r\n" dataUsingEncoding:NSUTF8StringEncoding] #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // 创建请求 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/upload"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @"POST"; // 设置请求头(告诉告诉服务器,这是一个文件上传的请求) [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", XMGBoundary] forHTTPHeaderField:@"Content-Type"]; // 设置请求体 NSMutableData *body = [NSMutableData data]; // 文件参数 /* --分割线\r\n Content-Disposition: form-data; name="参数名"; filename="文件名"\r\n Content-Type: 文件的MIMEType\r\n \r\n 文件数据 \r\n */ // 分割线 [body appendData:XMGEncode(@"--")]; [body appendData:XMGEncode(XMGBoundary)]; [body appendData:XMGNewLine]; // 文件参数名 [body appendData:XMGEncode([NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"test.png\""])]; [body appendData:XMGNewLine]; // 文件的类型 [body appendData:XMGEncode([NSString stringWithFormat:@"Content-Type: image/png"])]; [body appendData:XMGNewLine]; // 文件数据 [body appendData:XMGNewLine]; // UIImageJPEGRepresentation(<#UIImage *image#>, <#CGFloat compressionQuality#>) UIImage *image = [UIImage imageNamed:@"placeholder"]; [body appendData:UIImagePNGRepresentation(image)]; // [body appendData:[NSData dataWithContentsOfFile:@"/Users/xiaomage/Desktop/test.png"]]; [body appendData:XMGNewLine]; // 非文件参数 /* --分割线\r\n Content-Disposition: form-data; name="参数名"\r\n \r\n 参数值 \r\n */ // 分割线 [body appendData:XMGEncode(@"--")]; [body appendData:XMGEncode(XMGBoundary)]; [body appendData:XMGNewLine]; // 参数名 [body appendData:XMGEncode([NSString stringWithFormat:@"Content-Disposition: form-data; name=\"username\""])]; [body appendData:XMGNewLine]; // 参数值 [body appendData:XMGNewLine]; [body appendData:XMGEncode(@"jack")]; [body appendData:XMGNewLine]; // 结束标记 /* --分割线--\r\n */ [body appendData:XMGEncode(@"--")]; [body appendData:XMGEncode(XMGBoundary)]; [body appendData:XMGEncode(@"--")]; [body appendData:XMGNewLine]; request.HTTPBody = body; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]); }]; } @end
// // NSDictionary+Log.m // 05-掌握-多值参数 #import <Foundation/Foundation.h> @implementation NSDictionary (Log) - (NSString *)descriptionWithLocale:(id)locale { NSMutableString *string = [NSMutableString string]; // 开头有个{ [string appendString:@"{\n"]; // 遍历所有的键值对 [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { [string appendFormat:@"\t%@", key]; [string appendString:@" : "]; [string appendFormat:@"%@,\n", obj]; }]; // 结尾有个} [string appendString:@"}"]; // 查找最后一个逗号 NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch]; if (range.location != NSNotFound) [string deleteCharactersInRange:range]; return string; } @end @implementation NSArray (Log) - (NSString *)descriptionWithLocale:(id)locale { NSMutableString *string = [NSMutableString string]; // 开头有个[ [string appendString:@"[\n"]; // 遍历所有的元素 [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { [string appendFormat:@"\t%@,\n", obj]; }]; // 结尾有个] [string appendString:@"]"]; // 查找最后一个逗号 NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch]; if (range.location != NSNotFound) [string deleteCharactersInRange:range]; return string; } @end
11-了解-获得文件的MIMEType
// // ViewController.m // 11-了解-获得文件的MIMEType #import "ViewController.h" #import <MobileCoreServices/MobileCoreServices.h> #import "NSString+MIMEType.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; NSLog(@"%@", [@"/Users/xiaomage/Desktop/test.mp4" MIMEType]); NSLog(@"%@", [@"/Users/xiaomage/Desktop/test.png" MIMEType2]); // NSLog(@"%@", [ViewController mimeTypeForFileAtPath:@"/Users/xiaomage/Desktop/test.png"]); } + (NSString *)mimeTypeForFileAtPath:(NSString *)path { if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { return nil; } CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)[path pathExtension], NULL); CFStringRef MIMEType = UTTypeCopyPreferredTagWithClass (UTI, kUTTagClassMIMEType); CFRelease(UTI); if (!MIMEType) { return @"application/octet-stream"; } return (__bridge NSString *)MIMEType; } - (void)MIMEType { // NSString *url = @"file:///Users/xiaomage/Desktop/test.pptx"; // NSString *urlString = @"file:///Users/xiaomage/Desktop/test.png"; // NSURL *url = [NSURL URLWithString:urlString]; NSURL *url = [NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/test.png"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; // [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // NSLog(@"%@", response.MIMEType); // }]; NSURLResponse *response = nil; [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; NSLog(@"%@", response.MIMEType); } - (NSString *)getMIMEType:(NSString *)file { NSURLResponse *response = nil; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:file]]; [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; return response.MIMEType; } @end
// // NSString+MIMEType.h // 11-了解-获得文件的MIMEType #import <Foundation/Foundation.h> @interface NSString (MIMEType) - (NSString *)MIMEType; - (NSString *)MIMEType2; @end
// // NSString+MIMEType.m // 11-了解-获得文件的MIMEType #import "NSString+MIMEType.h" #import <MobileCoreServices/MobileCoreServices.h> @implementation NSString (MIMEType) - (NSString *)MIMEType { if (![[NSFileManager defaultManager] fileExistsAtPath:self]) { return nil; } CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)[self pathExtension], NULL); CFStringRef MIMEType = UTTypeCopyPreferredTagWithClass (UTI, kUTTagClassMIMEType); CFRelease(UTI); if (!MIMEType) { return @"application/octet-stream"; } return (__bridge NSString *)MIMEType; } - (NSString *)MIMEType2 { NSURLResponse *response = nil; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:self]]; [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil]; return response.MIMEType; } @end
本人无商业用途,仅仅是学习做个笔记,特别鸣谢小马哥,学习了IOS,另日语学习内容有需要文本和音频请关注公众号:riyuxuexishuji