zoukankan      html  css  js  c++  java
  • 源码0602-10-掌握-文件上传11-了解-获得文件的MIMEType

    //
    //  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

    本人无商业用途,仅仅是学习做个笔记,特别鸣谢小马哥,学习了IOS,另日语学习内容有需要文本和音频请关注公众号:riyuxuexishuji
  • 相关阅读:
    kafka 的基本概念及使用场景
    使用RedisTemplate执行Redis脚本
    SpringBoot使用Lua脚本操作Redis
    Java不定参数Object… obj 和 Object[] 的区别
    IntelliJ IDEA添加快捷键自动输入@author信息
    使用Guava RateLimiter限流以及源码解析
    go fileserver
    记录了prometheus 告警指标
    https://mp.weixin.qq.com/s/ZBsZHQtAz_vKS8fwvHKB3g图文分析Kubernetes认证、授权和准入控制
    es不停机滚动update
  • 原文地址:https://www.cnblogs.com/laugh/p/6606402.html
Copyright © 2011-2022 走看看