HarmonyOS 文件下载saveas希望支持下绝对路径

项目很多逻辑路径是在flutter端初始化的,包括files和cache及其他目录,传到HarmonyO端的文件全路径比如:data/storage/el2/base/files/flutter/Focus/yXu197AmRxN7W8yguViaz/nlaAEGuL8g6irJaGQ57lx/DownloadFiles/document/628764a24/应用HarmonyO化解决方案一指禅-v2.1-水印.pdf,这个路径下载就会报错,需要改成相对路径才行,这个有点别扭,代码如下:

let path = downloadInfo.savedDir + "/" + downloadInfo.fileName 
let downloadConfig: request.agent.Config = { 
  url: downloadInfo.url, 
  action: request.agent.Action.DOWNLOAD, 
  method: 'GET', 
  title: 'download', 
  mode: request.agent.Mode.BACKGROUND, 
  retry: true, 
  network: request.agent.Network.ANY, 
  saveas:  path, //`./${downloadInfo.fileName}`, 
  overwrite: false, 
  headers: record, 
  gauge:false 
} 
let downloadTask: request.agent.Task = await request.agent.create(context, downloadConfig) 
await downloadTask.start()

绝对路径为什么不行呢?或者如何将绝对路径转化为相对路径呢?

HarmonyOS
2024-09-09 10:38:05
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

1. 出于安全考虑,应用无法直接读取系统路径,加载本地资源仅支持沙箱路径。

2. 若使用系统公共目录文件,需将文件拷贝至沙箱目录下。请参考Demo:

pickerPhoto() { 
  try { 
    let options = new picker.PhotoSelectOptions(); 
    options.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; 
    options.maxSelectNumber = 1; 
    let p = new picker.PhotoViewPicker(); 
    p.select(options).then((res:picker.PhotoSelectResult) => { 
      console.info("txy photo is uri" + res.photoUris[0]) 
      this.saveFile(res.photoUris[0]); 
    }) 
  } catch (e) { 
    console.error("txy select tailed..") 
  } 
} 
async saveFile(uri: string) { 
  // 将公共目录的文件,拷贝至沙箱路径 
  let destDist = getContext(this).cacheDir + "/test.png"; 
  let src = fs.openSync(uri, fs.OpenMode.READ_ONLY); 
  let dst = fs.openSync(destDist, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); 
  fs.copyFileSync(src.fd, dst.fd); 
}
分享
微博
QQ
微信
回复
2024-09-09 15:37:53
相关问题
如何获取文件绝对路径
2130浏览 • 1回复 待解决
HarmonyOS中如何获取资源的绝对路径
489浏览 • 1回复 待解决
支持下载和安装三方App吗?
653浏览 • 1回复 待解决
是否支持iframe下载文件
782浏览 • 1回复 待解决
如何获取profile路径资源文件
1787浏览 • 1回复 待解决
修改沙箱路径json文件的指定内容
2383浏览 • 1回复 待解决
如何读取读取分布式路径文件
331浏览 • 1回复 待解决
ETs,对沙箱路径的json文件内容遍历
3327浏览 • 1回复 待解决