美文网首页
iOS - 文件读取操作

iOS - 文件读取操作

作者: 西瓜一号 | 来源:发表于2021-10-28 15:01 被阅读0次

项目需求

1.从微信\QQ导入文件
2.从iCloud导入文件

思路

从微信/QQ导入文件

1.APP内打开微信/QQ
2.微信/QQ选取文件
3.选择其他应用打开
4.APP内接收

从本地导入文件

1.打开iCloud
2.选择文件
3.APP内接收

实现需求1

1.APP内打开微信/QQ,首先需要设置白名单,在项目info.plist文件添加LSApplicationQueriesSchemes字段,类型设置Array,添加微信:weixin;QQ:mqq,添加完成如下图所示:

<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>mqq</string>
        <string>weixin</string>
    </array>
image.png

2.添加其他应用打开权限,在项目info.plist文件添加CFBundleDocumentTypes字段,类型设置Array

<key>CFBundleDocumentTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeName</key>
            <string></string>
            <key>LSHandlerRank</key>
            <string>Default</string>
            <key>LSItemContentTypes</key>
            <array>
                <string>com.adobe.pdf</string>
                <string>com.microsoft.word.doc</string>
                <string>com.microsoft.powerpoint.ppt</string>
                <string>public.item</string>
                <string>public.data</string>
                <string>public.text</string>
                <string>public.content</string>
                <string>public.composite-content</string>
            </array>
        </dict>
    </array>
image.png

3.app内打开微信/QQ

//从qq获取文件
- (IBAction)touchGoQQBtn:(id)sender {
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"mqq://"]]) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mqq://"] options:@{} completionHandler:nil];
    }
}
//从微信获取文件
- (IBAction)touchGoWeChatBtn:(id)sender {
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin://"]]) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://"] options:@{} completionHandler:nil];
    }
    
}

4.微信/QQ内操作
打开文件

微信打开文件.jpg 微信选择其他应用打开.jpg 选择我们的项目.jpg

5.app内接收文件,在AppDelegate添加以下方法

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    // 文件路径file:///private/var/mobile/Containers/Data/Application/B5C8630F-0A5D-4795-B3D0-81B8CCAB6909/Documents/Inbox/%E9%A1%B9%E7%9B%AE%E5%91%A8%E6%8A%A5%E6%B1%87%E6%80%BB202100607.xlsx
    NSLog(@"url  %@",[url absoluteString]);
    // 通过前缀来判断是文件
    if ([[url absoluteString] containsString:@"file"]) {
        NSArray *array = [[url absoluteString] componentsSeparatedByString:@"/"];
       // 去除前缀
        NSString *fileName = [array lastObject];
        fileName = [fileName stringByRemovingPercentEncoding];
       //发送通知,附带文件路径
        [[NSNotificationCenter defaultCenter] postNotificationName:@"xx" object:path];
        //或者本地存储
        //Documents目录 :用于存储用户数据或其它应该定期备份的信息。
        // tmp 目录:这个目录用于存放临时文件,保存应用程序再次启动过程中不需要的信息。
        NSString *path = [NSHomeDirectory() stringByAppendingString:[NSString stringWithFormat:@"/Documents/xx/%@",fileName]];

        NSData *data = [NSData dataWithContentsOfFile:path];
        //文件写入结果
        BOOL result = [data writeToFile:path atomically:YES];

    }
    return YES;
}

6.接收通知,根据需求处理,,,,

实现需求2

1、登陆开发者后台,配置权限,选择自己的项目

选择自己的项目.png 勾选iCloud权限.png

Edit选择自己的项目
2.xcode配置


image.png
image.png
image.png

以上配置如有遗漏,可能造成的后果有,或不走回调,或回调返回失败,或不能获取文件路径等

3.代码实现
打开iCloud

//从icloud获取文件
- (IBAction)touchGoiCloudBtn:(id)sender {
    
    //设置可以打开的文件类型,如没有设置可打开的类型,iCloud文件将是灰色,无法选中
    NSArray *documentTypes = @[@"public.content", @"public.text", @"public.source-code ", @"public.image", @"public.audiovisual-content", @"com.adobe.pdf", @"com.apple.keynote.key", @"com.microsoft.word.doc", @"com.microsoft.excel.xls", @"com.microsoft.powerpoint.ppt"];
    UIDocumentPickerViewController *documentPickerViewController = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:documentTypes inMode:UIDocumentPickerModeOpen];
    documentPickerViewController.delegate = self;
    [self presentViewController:documentPickerViewController animated:YES completion:nil];
    
}
#pragma mark - UIDocumentPickerDelegate
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url {
    
    NSArray *array = [[url absoluteString] componentsSeparatedByString:@"/"];
    NSString *fileName = [array lastObject];
    fileName = [fileName stringByRemovingPercentEncoding];
    
   //如需存储本地,还需从iCloud下载数据
}

需求完成,收工干饭

相关文章

  • iOS - 文件读取操作

    项目需求 1.从微信\QQ导入文件2.从iCloud导入文件 思路 从微信/QQ导入文件 1.APP内打开微信/Q...

  • PHP学习笔记 - 进阶篇(7)

    文件操作 读取文件内容 PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,...

  • 04-Nextflow 文件和I/O

    基本读/写, 逐行读取文件, 高级文件读取操作, 高级文件写入操作, 列出目录内容, 创建目录, 创建链接, 复制...

  • node.js 学习五 之 文件操作

    node.js 中有同步读取文件和异步读取文件的区别 同步读取就是顺序进行,文件读取操作不进行完就不进行下一步操作...

  • Golang读取文件

    golang读取文件操作

  • java读取大文件解决思路

    1. java 读取大文件的困难 java 读取文件的一般操作是将文件数据全部读取到内存中,然后再对数据进行操作。...

  • 读取文件操作

    一.python写入文件操作 1.调用buid-in函数:open打开或者创建文件, 如果exampleFile....

  • (八)文件

    1.读取文件的操作---open() 2.创建文件的基本操作: 3.读取文件的状态---os,time模块 4.r...

  • 2021-12-22 Python-17

    文件操作 文件读取 文件读取到内存中时,可以通过一次性读取文件的全部内容,也可以每次一行方式逐步读取。1.读取整个...

  • NSFileManager类

    文件操作 基于NSFileManager类,允许用户对文件进行基本操作。这些操作包括:创建新的文件、读取文件、对文...

网友评论

      本文标题:iOS - 文件读取操作

      本文链接:https://www.haomeiwen.com/subject/bdomaltx.html