plus.io

2020-10-18  本文已影响0人  扶不起的蝌蚪

很久没写文章了,最近深入研究了下io方面的问题,发现5+API还是很强大的。


Android系统限制

Android 10+

Android 10系统开始 进一步增强了平台功能,为外部存储设备上的应用和用户数据提供了更好的保护。作为这项工作的一部分,平台引入了进一步的改进,以简化向分区存储的转换,让用户更好地控制自己的文件,保护用户隐私数据,并限制文件混乱情况。

Android 11

\color{red}{分区存储}基础上限制了应用访问其他应用的文件。


分区存储

概念

先说一下为什么会有分区存储这个机制出现。

在分区存储之前,某些应用中,即使功能很简单,大部分都不需要这么宽泛的权限,这就使得某些应用程序:

1、乱占空间 :各种各样的文件散布在磁盘的各个地方,当用户卸载应用之后,这些被遗弃的文件被滞留在原地,无人管理,占用了磁盘空间,最终结果就会导致磁盘不足
2、随意读取用户的数据
3、随意读取应用的数据

因此\color{red}{分区存储}诞生了,也可以把它叫做\color{red}{沙盒存储}

\color{red}{分区存储}是一种安全机制,用于防止应用读取其他应用的数据。

分区存储机制下uni-app/5+ 开发者的影响

dcloud已对分区存储机制做了适配工作。但也增加了开发者对文件目录操作的规则。在分区存储的环境下分出两个可操文件数据目录\color{red}{应用公共目录}\color{red}{应用沙盒目录.}


目录分析

android的目录在开发APP所涉及到的有\color{red}{系统公告目录}\color{red}{应用沙盒目录}

\color{red}{应用沙盒目录}下面又分为\color{red}{应用公共目录}\color{red}{应用沙盒目录}

系统公共目录

主要包括DownloadsDocumentsPicturesDCIMMoviesMusic等。

Downloads Documents DCIM Movies Music

系统公共目录缺陷:

如果需要其他第三方读取我们开发的APP的文件怎么办?

应用沙盒存储(分区存储)目录

分区存储主要包括应用的公有目录和应用的私有目录

  • plus.io.PUBLIC_DOCUMENTS:应用公共文档目录
    fileSystem
    注意的是当我们请求这个公共目录的时候,它不会创建显示出来,只有当我们在这个文件夹下面创建文件或者目录的时候,这个document目录才会出来
plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, fileSystem => {
    console.log(fileSystem.name);
});
//PUBLIC_DOCUMENTS
plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, fileSystem => {
        fileSystem.root.getDirectory('testCommonEntry', {
        create: true,
        exclusive: false
    })
});
documents目录出现
testCommonEntry测试公共目录
  • plus.io.PUBLIC_DOWNLOADS:应用公共下载目录
    fileSystem
    注意的是当我们请求这个公共目录的时候,它不会创建显示出来,只有当我们在这个文件夹下面创建文件或者目录的时候,这个downloads目录才会出来
plus.io.requestFileSystem(plus.io.PUBLIC_DOWNLOADS fileSystem => {
    console.log(fileSystem.name);
});
//plus.io.PUBLIC_DOWNLOADS
plus.io.requestFileSystem(plus.io.PUBLIC_DOWNLOADS, fileSystem => {
        fileSystem.root.getDirectory('testDownloadEntry', {
        create: true,
        exclusive: false
    })
});
downloads
testDownloadEntry测试公共目录
  • plus.io.PRIVATE_WWW:应用所有资源保存到此目录,仅本应用可访问。 为了确保应用资源的安全性,通常此目录只可读
    官方基座自定义基座不需要进行plus.io操作即可看到WWW目录
    www目录
    但是注意正式包看不了www目录
    正式包没有WWW目录
    如何才能看到WWW目录呢,需要将应用设置为释放资源模式才能访问此目录,配置方法:
  • uni-app项目,在manifest.jsonapp-plus节点下添加"runmode":"liberate"
  • 5+ App项目,在manifest.jsonplus节点下添加"runmode":"liberate"
    不过本人测试的APP中有些有WWW目录,有些还是没有WWW目录,不知道是什么原因,以后再分析吧
  • plus.io.PRIVATE_DOC:应用私有文档目录,仅本应用可读写
    doc目录
    这个目录没啥好说的,不需要配置或者用plus.io即可正常看到该目录

uni.downloadFileuni.saveFile分析

直接上代码,我们去手机目录看

const downloadTask = uni.downloadFile({
    //仅为示例,并非真实的资源
    url: 'http://img.netbian.com/file/2019/0414/7bee7eef5fc44417a0b02a46576e7e16.jpg',
    success: res => {
        if (res.statusCode === 200)
            uni.saveFile({
                tempFilePath: res.tempFilePath,
                success: red => {
                    this.luj = red.savedFilePath
                }
            });
    }
});
第一次uni.downloadFile
官方注明了:文件的临时路径,在应用本次启动期间可以正常使用,如需持久保存,需在主动调用 uni.saveFile,才能在应用下次启动时访问得到**
我们第二次启动APP,再进行一次下载看会发生什么
第二次uni.downloadFile
可以看到将第一次的download目录删除了,重新生成了一个下载的目录,所以为了持久存储,uni.saveFile出现了。
uni.saveFile目录

自定义下载文件位置

上一篇下一篇

猜你喜欢

热点阅读