上一节我们结合Core File Kit和Image Kit实现了位图数据转存为图片文件的功能,当时图片文件位于应用的沙箱目录下。应用沙箱是一种以安全防护为目的的隔离机制,避免数据受到恶意路径穿越访问。在这种沙箱的保护机制下,应用可见的目录范围即为“应用沙箱目录”。
不光图片要保存应用沙箱目录下,凡是App要读写的所有文件都必须放在沙箱目录,包括网络文件下载的保存目录,以及待上传文件的所在目录,都要求位于应用的沙箱目录。那么短视频App制作的自媒体视频,也得先从相册路径复制到应用的沙箱目录,才能向服务器提交上传。那么根据沙箱文件的操作规范,可将完整的文件复制过程划分为下列三个步骤:
一、各自打开复制操作的源文件和目标文件
鸿蒙把文件操作能力封装到了Core File Kit(文件基础服务),并通过fileIo工具来调用文件操作函数。为此要在代码开头添加下面的导包语句,表示引入文件操作工具fileIo:
import { fileIo } from '@kit.CoreFileKit';鸿蒙把创建文件和打开文件合并到了一起,调用open函数或者openSync函数,即可实现创建并打开文件的功能。注意,在调用open或者openSync的时候,模式参数要填“fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE”,表示指定路径若不存在文件就创建新文件,若已存在文件就打开原文件。示例代码如下:
let srcFile = fileIo.openSync(path.toString());
let dstFile = fileIo.openSync(dstPath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);二、把文件从源路径复制到应用沙箱的目标路径
调用fileIo工具的copyFile函数或者copyFileSync函数,即可实现复制文件的功能。示例代码如下:
fileIo.copyFileSync(srcFile.fd, dstFile.fd);三、复制完毕,关闭第一步的源文件和目标文件
调用fileIo工具的close函数或者closeSync函数,即可实现关闭文件的功能。示例代码如下:
fileIo.closeSync(srcFile);
fileIo.closeSync(dstFile);综合上述三个步骤,可编写把文件复制到沙箱目录的代码框架如下所示:
copyFile(path: string) {
let fileName = path.toString().split('/').pop() as string;
let dstPath = `${this.context.cacheDir}/${fileName}`
let srcFile = fileIo.openSync(path.toString());
let dstFile = fileIo.openSync(dstPath, fileIo.OpenMode.READ_WRITE | fileIo.OpenMode.CREATE);
fileIo.copyFileSync(srcFile.fd, dstFile.fd);
fileIo.closeSync(srcFile);
fileIo.closeSync(dstFile);
}下一篇文章会介绍如何呈现正在上传文件的界面等待效果。