#2023盲盒+码# 快速了解应用沙箱、下载文件到应用目录和读取文件列表 原创

westinyang
发布于 2023-9-2 23:36
浏览
1收藏

【本文正在参加 2023「盲盒」+码有奖征文活动】 https://ost.51cto.com/posts/25284

@toc

快速了解应用沙箱

无论是官方文档,还是其他有关沙箱的技术讲解中,关于隔离机制、访问关系和对应路径等有关图文内容都比较多且对于初学者不容易理解,其实对于初学者来说,在实际应用开发过程中,有些接口需要传递沙箱文件路径参数,你只需要看懂下面的这些即可,至于更深层次的理解,可以随着实践逐步再逐步去学习了解。

  • /data/app/el2/用户ID/base/应用包名/ 真实存储路径
    • cache | files | haps | preferences | temp
  • /data/storage/el2/base/ 实际对应的沙箱路径
  • 也就是说访问真实路径的文件时,编码阶段要把前缀替换为沙箱的路径前缀

下载文件到应用目录

  • 需要申请网络权限 ohos.permission.INTERNET
  • 使用 request.downloadFile 下载文件
  • downloadTask.on('complete' 回调中处理下载完成之后的操作
import request from '@ohos.request';
import common from '@ohos.app.ability.common';

......

downloadFile(fileUrl) {
    let downloadTask;

    // 下载路径,示例: /data/storage/el2/base/haps/entry/files/test.png
    let context = getContext(this) as common.UIAbilityContext;
    let filePath = context.filesDir + '/test.hap";

    // 下载文件
    try {
        request.downloadFile(context, {
            url: '待下载的文件URL',
            filePath: filePath
        }).then((data) => {
        downloadTask = data;
        // 监听下载完成
        downloadTask.on('complete', function callback() {
            console.info('下载完成');
            // TODO ...
        });
        // 监听下载失败
        downloadTask.on('fail', function callBack(err) {
            console.info('下载失败:' + err);
        });
        }).catch((err) => {
            console.error('下载失败:' + JSON.stringify(err));
        })
    } catch (err) {
        console.error('err.code : ' + err.code + ', err.message : ' + err.message);
    }
}

读取文件列表

  • 这里示例为读取一些图片文件,suffix可以过滤读取的文件后缀
  • 使用 fs.listFile 读取文件列表,第一个参数为文件夹的应用沙箱路径,第二个为文件过滤选项
  • 最终拿到的 filenames,就是读取到的所有文件名
import fs from '@ohos.file.fs';
import common from '@ohos.app.ability.common';

......

let context = getContext(this) as common.UIAbilityContext;
let filePath = context.filesDir;
let options = {
  "recursion": false,
  "listNum": 0,
  "filter": {
    "suffix": [".jpg", ".png"]
  }
};
fs.listFile(filePath, options).then((filenames) => {
  for (let i = 0; i < filenames.length; i++) {
    console.info("fileName: %s", filenames[i]);
  }
}).catch((err) => {
  console.info("读取异常: " + err.message + ", error code: " + err.code);
});

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏 1
回复
举报
回复
    相关推荐