> 文档中心 > HarmonyOS应用开发-文件上传问题的解决方式

HarmonyOS应用开发-文件上传问题的解决方式

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

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

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

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

代码如下:

 HiLog.info(label,"私有目录:"+this.getFilesDir());        HiLog.info(label,"缓存目录:"+this.getCacheDir());        HiLog.info(label,"数据目录:"+this.getDataDir());        HiLog.info(label,"外部目录:"+this.getExternalCacheDir());        HiLog.info(label,"引用目录:"+this.getPreferencesDir());        HiLog.info(label,"同步目录:"+this.getDistributedDir());        HiLog.info(label,"应用目录:"+this.getDir("", Context.MODE_PRIVATE));        File[] dataChildFiles = this.getDataDir().listFiles();        for (File dataChildFile : dataChildFiles) {            HiLog.info(label,"数据子目录:"+dataChildFile);        }        File[] externalFiles=this.getExternalMediaDirs();        for (File externalFile : externalFiles) {            HiLog.info(label,"外部Media目录:"+externalFile);        }        try {            //该目录和JSUI中的internal://cache/目录是一个目录            File file=new File(this.getCacheDir()+"/111.jpg");            HiLog.info(label,"文件路径:"+file);            if(file.exists())            {                HiLog.info(label,"文件已存在");               return;            }            HiLog.info(label,"文件不存在");          InputStream inputStream = getContext().getResourceManager().getResource(ResourceTable.Media_icon);            ImageSource.SourceOptions srcOpts = new ImageSource.SourceOptions();            srcOpts.formatHint = "image/jpeg";            ImageSource imageSource = ImageSource.create(inputStream, srcOpts);            // 设置图片参数            ImageSource.DecodingOptions decodingOptions = new ImageSource.DecodingOptions();            decodingOptions.desiredSize=new Size(200,200);            imageSource.createPixelmap(decodingOptions);            //该种方式直接访问internal://app目录//            FileOutputStream fos=new FileOutputStream("/data/user/0/com.example.abilitytransfertest/files//111.jpg");            FileOutputStream fos=new FileOutputStream(this.getCacheDir()+"/111.jpg");            ImagePacker imagePacker = ImagePacker.create();            ImagePacker.PackingOptions packingOptions = new ImagePacker.PackingOptions();            packingOptions.format = "image/jpeg";            packingOptions.quality = 90;            boolean result = imagePacker.initializePacking(fos, packingOptions);            if(result)            {                result = imagePacker.addImage(imageSource.createPixelmap(decodingOptions));                if (result) {                    long dataSize = imagePacker.finalizePacking();                    HiLog.info(label,"文件大小:"+dataSize);                }            }            fos.flush();            fos.close();            if(file.exists())            {                HiLog.info(label,"文件已存在");                return;            }        } catch (IOException | NotExistException e) {            HiLog.info(label,"文件保存出错:"+e.getMessage());            e.printStackTrace();        }        File file=this.getCacheDir();        File[] files = file.listFiles();        for (File file1 : files) {            HiLog.info(label,"File目录:"+file1);        }