访问沙盒外文档UIDocumentPickerViewController

简介: 官方文档解析官方文档:https://developer.apple.com/documentation/uikit/uidocumentpickerviewcontroller?language=objcUIDocumentPickerViewController有四种模式:Import an external document:用户选择一个外部文档,文档选择器拷贝该文档到应用沙盒,不会修改源文档。

官方文档解析

官方文档:https://developer.apple.com/documentation/uikit/uidocumentpickerviewcontroller?language=objc

UIDocumentPickerViewController有四种模式:

  • Import an external document:用户选择一个外部文档,文档选择器拷贝该文档到应用沙盒,不会修改源文档。
  • Export a local document:文档选择器拷贝文档到一个外部路径,不会修改源文档。
  • Open an external document:打开一个外部文档,用户可以修改该文档。
  • Move a local document:拷贝文档到外部路径,同时可以修改该拷贝。

操作外部文件注意事项

  • open与move操作会提供外部文件的security-scoped URL 。调用startAccessingSecurityScopedResource开始访问,访问完成调用stopAccessingSecurityScopedResource
  • 使用NSFileCoordinator来操作外部文件
  • 使用NSFilePresenter来展示外部文件内容
  • 不要存储security-scoped URL

调用Demo

展示文件选择

- (void)presentDocumentPicker {
    NSArray *types = @[]; // 可以选择的文件类型
    UIDocumentPickerViewController *documentPicker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:types inMode:UIDocumentPickerModeOpen];
    documentPicker.delegate = self;
    documentPicker.modalPresentationStyle = UIModalPresentationFullScreen;
    [self presentViewController:documentPicker animated:YES completion:nil];
}

用户选择文件回调

- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
    BOOL canAccessingResource = [url startAccessingSecurityScopedResource];
    if(canAccessingResource) {
        NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
        NSError *error;
        [fileCoordinator coordinateReadingItemAtURL:url options:0 error:&error byAccessor:^(NSURL *newURL) {
            NSData *fileData = [NSData dataWithContentsOfURL:newURL];
            NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentPath = [arr lastObject];
            NSString *desFileName = [documentPath stringByAppendingPathComponent:@"myFile"];
            [fileData writeToFile:desFileName atomically:YES];
            [self dismissViewControllerAnimated:YES completion:NULL];
        }];
        if (error) {
            // error handing
        }
    } else {
        // startAccessingSecurityScopedResource fail
    }
    [url stopAccessingSecurityScopedResource];
}

文件类型定义

initWithDocumentTypes:inMode:中,types需要传入一个uniform type identifiers (UTIs)数组。关于UTIs的官方文档,常见列表

目录
相关文章
|
5月前
|
移动开发 小程序 API
【小程序质量提优解决方案】(三)内嵌H5页面访问受限
【小程序质量提优解决方案】(三)内嵌H5页面访问受限
344 0
|
XML 存储 SQL
独立部署Xray反练平台——详细说明加举例xxe漏洞
xray 是一款功能强大的安全评估工具,由多名经验丰富的一线安全从业者呕心打造而成,主要特性有:检测速度快。发包速度快; 漏洞检测算法高效。支持范围广。大至 OWASP Top 10 通用漏洞检测,小至各种 CMS 框架 POC,均可以支持。代码质量高。编写代码的人员素质高, 通过 Code Review、单元测试、集成测试等多层验证来提高代码可靠性。高级可定制。通过配置文件暴露了引擎的各种参数,通过修改配置文件可以极大的客制化功能。安全无威胁。xray 定位为一款安全辅助评估工具,而不是攻击工具,内置的所有 payload 和 poc 均为无害化检查。
1568 0
独立部署Xray反练平台——详细说明加举例xxe漏洞
|
2月前
|
编解码 JavaScript 前端开发
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
JS逆向浏览器脱环境专题:事件学习和编写、DOM和BOM结构、指纹验证排查、代理自吐环境通杀环境检测、脱环境框架、脱环境插件解决
58 1
|
4月前
|
存储 安全 PHP
安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制&文件管理模块&包含&上传&遍历&写入&删除&下载&安全
安全开发-PHP应用&文件管理模块&显示上传&黑白名单类型过滤&访问控制&文件管理模块&包含&上传&遍历&写入&删除&下载&安全
|
5月前
|
存储 算法 C语言
【C/C++ 应用开发 检测文件 】详解 C/C++ 中常用的 5 种文件存在检查方式
【C/C++ 应用开发 检测文件 】详解 C/C++ 中常用的 5 种文件存在检查方式
151 0
|
编译器 C++ Windows
程序环境的内容
程序环境的内容
|
12月前
|
小程序 PHP
[微擎]多系统共用accesstoken修复wifi小程序文本敏感词汇检测+图片检测原生php(可用)
[微擎]多系统共用accesstoken修复wifi小程序文本敏感词汇检测+图片检测原生php(可用)
|
前端开发 安全 数据库
【每日渗透笔记】覆盖漏洞+修改隐藏数据实战尝试
【每日渗透笔记】覆盖漏洞+修改隐藏数据实战尝试
73 0
【每日渗透笔记】覆盖漏洞+修改隐藏数据实战尝试
|
机器学习/深度学习 iOS开发 安全
下一篇
无影云桌面