智能小程序档案馆——文件系统能力

栏目: 后端 · 发布时间: 5年前

内容简介:小游戏的出现,对文件系统能力提出了更高的要求,因此我们在小程序的文件能力基础上进行了如下扩展:新增了文件系统为开发者提供了更加完善的能力来支撑小游戏中复杂的文件目录结构和文件读写操作,并且每个小游戏的

小游戏的出现,对文件系统能力提出了更高的要求,因此我们在小程序的文件能力基础上进行了如下扩展:

新增接口

新增了 目录管理文件操作 等接口,将这些能力封装成文件系统。

提升存储能量

文件系统为开发者提供了更加完善的能力来支撑小游戏中复杂的文件目录结构和文件读写操作,并且每个小游戏的 本地用户文件 存储容量提升到了50M。

提供用户资源隔离机制

为保证用户之间和小游戏小程序之间的资源信息不被盗取或篡改,文件系统还提供了一套 用户资源隔离机制 ,来避免登录用户之间的文件内容会互相影响,和保护信息资源的安全。

文件类型

智能小程序档案馆——文件系统能力

本地临时文件

主要由 swan.downloadFile() 等特定API执行产生,这些特定的API会返回一个临时的文件地址,该地址只能在当前游戏的生命周期内使用,在游戏销毁后该临时地址和 本地临时文件 会被清除。用户只有 可读文件权限 ,这类文件无法直接调用文件系统的API对 本地临时文件 执行写入操作,最大存储为25M 。

示例:

```
swan.downloadFile({
    url: 'https://smartprogram.baidu.com/docs/img/logo.png',
    success: res => {
        console.log(res.tempFilePath);  // 返回本地临时文件路径 bdfile://tmp/1542099788398.png
    },
    fail: err => {
        console.log(err);
    }
})
```
复制代码

本地用户文件

主要由文件系统API操作产生,包括:文件夹操作、文件读写操作、 本地临时文件 的存储等,通过 swan.env.USER_DATA_PATH 可以获取到这个目录的路径。用户拥有 可读可写权限 。这类文件在退出游戏后数据不会被清除,可持久化保存文件,最大存储为50M。

示例:
```
fileSystemManager.writeFileSync(
	`${swan.env.USER_DATA_PATH}/demo.txt`,
    'hello',
    'utf8'
);
```
复制代码

代码包/本地包文件:

存在代码包中的文件。用户 只可读,不可写入 。 代码包文件的访问方式是从项目根目录开始写文件路径,不需要带访问协议前缀。 如: loading/loading_barbg.png

智能小程序档案馆——文件系统能力
示例:

```
let data = fileSystemManager.readFileSync(
	`loading/loading_barbg.png`,
    'utf8'
);
```
复制代码
  • 本地文件的文件路径结构均为: {{协议名}}://文件路径
  • 文件系统不支持相对路径 ./../
  • 开发者不可访问 本地临时文件代码包文件本地用户文件父级目录或更高层目录 ,均会被拒绝。
  • 与微信不同:设计中不支持 本地缓存文件

生命周期:

  • 当退出当前游戏、后台运行游戏至5分钟、杀死百度app进程时,会清除当前用户游戏的 本地临时文件
  • 当游戏从列表中删除时,会清除当前用户被删除游戏的所有文件(包含: 代码包文件本地临时文件本地用户文件 )。

文件管理接口

通过 swan.getFileSystemManager() 可以获取全局唯一的文件管理器对象: fileSystemManager ,调用 fileSystemManager 对象上的方法来实现对文件的操作。

const fileSystemManager = swan.getFileSystemManager();
复制代码

场景示例:

  1. 使用 swan.downloadFile()fileSystemManager.saveFile() 方法,将下载的 本地临时文件 保存到 本地用户文件

    const fileSystemManager = swan.getFileSystemManager();
    swan.downloadFile({
        url: 'https://smartprogram.baidu.com/docs/img/logo.png',
        success: res => {
            console.log(res.tempFilePath);  // 返回本地临时文件路径
            // bdfile://tmp/1542099788398.png
            fileSystemManager.saveFile({
                tempFilePath: res.tempFilePath, // 传入本地临时文件路径
                success: res => {
                    // 存储后的文件路径
                    console.log(res.savedFilePath); 
                    // bdfile://usr/1542099788398.png
                },
    
                fail: err => {
                    console.log('接口执行失败', err.errMsg);
                },
                complete: res => {
    				console.log('接口执行完成');
    			}
            });
        },
        fail: err => {
            console.log(err);
        }
    })
    复制代码
  2. 将游戏关卡数据写入到 本地用户文件 中。

    const fileSystemManager = swan.getFileSystemManager();
    fileSystemManager.writeFile({
        filePath: `${swan.env.USER_DATA_PATH}/gameLevel.txt`,   // 传入本地用户文件路径
        data: '{"level": 3}',
        success: res => {
            // 写入成功。
            console.log(res);
            fileSystemManager.readFile({
                filePath: `${swan.env.USER_DATA_PATH}/gameLevel.txt`,
                encoding: 'utf8',
                success: res => {
                    console.log(JSON.parse(res.data));
                    // res.data 中为 string,文件内容: {level: 3}
                },
                fail: res => {
                    // res.errMsg 为失败信息。
                },
                complete: () => {
                    // 接口执行完成
                }
            });
        },
        fail: res => {
            // res.errMsg 为失败信息。
            console.log(res)
        },
        complete: () => {
            // 接口执行完成
            console.log('接口执行完成')
        }
    });
    复制代码
  3. 读取代码包文件。

    const fileSystemManager = swan.getFileSystemManager();
    fileSystemManager.readFile({
        filePath: 'game.json',
        encoding: 'utf8',
        success: res => {
            console.log(res);
        },
        fail: res => {
            console.log(res);
        },
        complete: () => {
            // 接口执行完成
        }
    });
    复制代码

用户资源隔离

在百度App登录之后,访问小游戏或小程序时,不同用户的文件会被存储到本地,以 百度账号 将文件(包含: 代码包文件本地临时文件本地用户文件 )隔离。每个用户下的所有小程序或者小游戏都是相互隔离的。游戏之间和用户之间,游戏资源都不会被互相访问到。这样既保证了用户的信息不会被其他账号访问到,又保证了每个小游戏小程序的数据安全性。

智能小程序档案馆——文件系统能力

由于百度和微信的登录体系不同,智能小程序和小游戏在不登录的情况下也可以打开。

如果您的小程序或小游需要用户登录才可以使用戏,一定要注意用户资源隔离系统。在未登录前下载的游戏资源会和登录之后的资源隔离。 所以保证用户等登录状态非常重要


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Smarter Than You Think

Smarter Than You Think

Clive Thompson / Penguin Press HC, The / 2013-9-12 / USD 27.95

It's undeniable—technology is changing the way we think. But is it for the better? Amid a chorus of doomsayers, Clive Thompson delivers a resounding "yes." The Internet age has produced a radical new ......一起来看看 《Smarter Than You Think》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试