网络-文件下载上传网络 NSURLSession

小文件下载
如果文件比较小,下载方式会比较多
直接用NSData的+ (id)dataWithContentsOfURL:(NSURL *)url;
利用NSURLConnection发送一个HTTP请求去下载
如果是下载图片,还可以利用SDWebImage框架

如果是大文件下载,建议使用NSURLSession或者第三方框架


文件上传的步骤

设置请求头
[request setValue:@"multipart/form-data; boundary=分割线" forHTTPHeaderField:@"Content-Type"];

设置请求体
非文件参数
--分割线\r\n
Content-Disposition: form-data; name="参数名"\r\n
\r\n
参数值
\r\n
文件参数
--分割线\r\n
Content-Disposition: form-data; name="参数名"; filename="文件名"\r\n
Content-Type: 文件的MIMEType\r\n
\r\n
文件数据
\r\n

参数结束的标记
--分割线--\r\n

部分文件的MIMEType

 

 获得文件的MIMEType

 

利用NSURLConnection
- (NSString *)MIMEType:(NSURL *)url
{
    // 1.创建一个请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    // 2.发送请求(返回响应)
    NSURLResponse *response = nil;
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
    // 3.获得MIMEType
    return response.MIMEType;
}
C语言API
+ (NSString *)mimeTypeForFileAtPath:(NSString *)path
{
    if (![[NSFileManager alloc] init] fileExistsAtPath:path]) {
        return nil;
    }
    
    CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (CFStringRef)[path pathExtension], NULL);
    CFStringRef MIMEType = UTTypeCopyPreferredTagWithClass (UTI, kUTTagClassMIMEType);
    CFRelease(UTI);
    if (!MIMEType) {
        return @"application/octet-stream";
    }
    return NSMakeCollectable(MIMEType);
}

 

第三方解压缩框架——ZipArchive

下载地址:https://github.com/ZipArchive/ZipArchive
需要引入libz.dylib框架
导入头文件Main.h
创建压缩文件
+ (BOOL)createZipFileAtPath:(NSString *)path
           withFilesAtPaths:(NSArray *)paths;
+ (BOOL)createZipFileAtPath:(NSString *)path
    withContentsOfDirectory:(NSString *)directoryPath;

解压
+ (BOOL)unzipFileAtPath:(NSString *)path
          toDestination:(NSString *)destination

网络 NSURLSession 

NSURLSession
使用步骤
使用NSURLSession对象创建Task,然后执行Task

Task的类型

获得共享的Session
+ (NSURLSession *)sharedSession;

自定义Session
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(id <NSURLSessionDelegate>)delegate delegateQueue:(NSOperationQueue *)queue;

NSURLSessionTask

常见方法
- (void)suspend; // 暂停
- (void)resume; // 恢复
- (void)cancel; // 取消
@property (readonly, copy) NSError *error; // 错误
@property (readonly, copy) NSURLResponse *response; // 响应

NSURLSessionDownloadTask

常见方法
- (void)cancelByProducingResumeData:(void (^)(NSData *resumeData))completionHandler; // 取消任务

 



 

posted @ 2017-03-21 13:00  laugh  阅读(232)  评论(0编辑  收藏  举报