// // ViewController.m // 10-掌握-文件上传 #define XMGBoundary @"520it" #define XMGEncode(string) [string dataUsingEncoding:NSUTF8StringEncoding] #define XMGNewLine [@" " 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]; // 文件参数 /* --分割线 Content-Disposition: form-data; name="参数名"; filename="文件名" Content-Type: 文件的MIMEType 文件数据 */ // 分割线 [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]; // 非文件参数 /* --分割线 Content-Disposition: form-data; name="参数名" 参数值 */ // 分割线 [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]; // 结束标记 /* --分割线-- */ [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:@"{ "]; // 遍历所有的键值对 [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { [string appendFormat:@" %@", key]; [string appendString:@" : "]; [string appendFormat:@"%@, ", 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:@"[ "]; // 遍历所有的元素 [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { [string appendFormat:@" %@, ", 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