当前位置:   article > 正文

HarmonyOS应用开发-文件上传问题的解决方式_鸿蒙4.0 文件 权限

鸿蒙4.0 文件 权限

在之前的分享中,曾经提到一个文件上传的问题

/data/user/0/cn.jltf.neighbor/files/534.jpg: open failed: ENOENT (No such file)

该文件不存在。但实际上该文件存在并能显示出来。后来发现是鸿蒙系统的权限问题,只能访问私有目录下的文件。

解决方法:将文件复制到私有目录下,再进行访问。

代码如下:

  1.  HiLog.info(label,"私有目录:"+this.getFilesDir());
  2.         HiLog.info(label,"缓存目录:"+this.getCacheDir());
  3.         HiLog.info(label,"数据目录:"+this.getDataDir());
  4.         HiLog.info(label,"外部目录:"+this.getExternalCacheDir());
  5.         HiLog.info(label,"引用目录:"+this.getPreferencesDir());
  6.         HiLog.info(label,"同步目录:"+this.getDistributedDir());
  7.         HiLog.info(label,"应用目录:"+this.getDir("", Context.MODE_PRIVATE));
  8.         File[] dataChildFiles = this.getDataDir().listFiles();
  9.         for (File dataChildFile : dataChildFiles) {
  10.             HiLog.info(label,"数据子目录:"+dataChildFile);
  11.         }
  12.         File[] externalFiles=this.getExternalMediaDirs();
  13.         for (File externalFile : externalFiles) {
  14.             HiLog.info(label,"外部Media目录:"+externalFile);
  15.         }
  16.         try {
  17.             //该目录和JSUI中的internal://cache/目录是一个目录
  18.             File file=new File(this.getCacheDir()+"/111.jpg");
  19.             HiLog.info(label,"文件路径:"+file);
  20.             if(file.exists())
  21.             {
  22.                 HiLog.info(label,"文件已存在");
  23.                return;
  24.             }
  25.             HiLog.info(label,"文件不存在");
  26.           InputStream inputStream = getContext().getResourceManager().getResource(ResourceTable.Media_icon);
  27.             ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions();
  28.             srcOpts.formatHint = "image/jpeg";
  29.             ImageSource imageSource = ImageSource.create(inputStream, srcOpts);
  30.             // 设置图片参数
  31.             ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions();
  32.             decodingOptions.desiredSize=new Size(200,200);
  33.             imageSource.createPixelmap(decodingOptions);
  34.             //该种方式直接访问internal://app目录//            FileOutputStream fos=new FileOutputStream("/data/user/0/com.example.abilitytransfertest/files//111.jpg");
  35.             FileOutputStream fos=new FileOutputStream(this.getCacheDir()+"/111.jpg");
  36.             ImagePacker imagePacker = ImagePacker.create();
  37.             ImagePacker.PackingOptions packingOptions = new ImagePacker.PackingOptions();
  38.             packingOptions.format = "image/jpeg";
  39.             packingOptions.quality = 90;
  40.             boolean result = imagePacker.initializePacking(fos, packingOptions);
  41.             if(result)
  42.             {
  43.                 result = imagePacker.addImage(imageSource.createPixelmap(decodingOptions));
  44.                 if (result) {
  45.                     long dataSize = imagePacker.finalizePacking();
  46.                     HiLog.info(label,"文件大小:"+dataSize);
  47.                 }
  48.             }
  49.             fos.flush();
  50.             fos.close();
  51.             if(file.exists())
  52.             {
  53.                 HiLog.info(label,"文件已存在");
  54.                 return;
  55.             }
  56.         } catch (IOException | NotExistException e) {
  57.             HiLog.info(label,"文件保存出错:"+e.getMessage());
  58.             e.printStackTrace();
  59.         }
  60.         File file=this.getCacheDir();
  61.         File[] files = file.listFiles();
  62.         for (File file1 : files) {
  63.             HiLog.info(label,"File目录:"+file1);
  64.         }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/296952
推荐阅读
相关标签
  

闽ICP备14008679号