HarmonyOS Next鸿蒙开发:下载文件
2025年1月17日 07:48
我们做项目过程中难免会有下载文件的场景,那么下载文件会涉及到一个是文件保存到DocumentViewPicker选择器,还有文件流保存的知识。
选择目录组件
项目业务需求中,有选择文件的需求。
选择文件,系统提供了DocumentViewPicker.save()
方法。
//直接强转为文件流数据
let dvp=new picker.DocumentViewPicker()
//打开保存文件操作
let result= await dvp.save({newFileNames:[Date.now()+'1.png']})
我这里是用到了axios的网络请求下载,当然也可以用官方的http请求方式进行网络请求,需要增加网络请求权限,axios安装也很简单。
网络请求
安装axios
ohpm i @ohos/axios
网络申请权限,在resource目录下的module.json5文件下module节点下添加即可。
"requestPermissions":[
{
"name":"ohos.permission.INTERNET"
}
]
文件流-保存文件
关于文件流的介绍请点击官方查看,这里要注意就是看是否更新,因鸿蒙发展很快,有很多时候,不注意看,就用旧的组件,比如官方不推荐@ohos.fileio,而推荐@ohos.file.fs
保存文件
let f = fs.openSync(path,fs.OpenMode.CREATE|fs.OpenMode.WRITE_ONLY)
fs.writeSync(f.fd,res.data)
fs.closeSync(f)//关闭文件
完整代码
import axios, { AxiosResponse } from '@ohos/axios';
import { fileIo as fs, picker } from '@kit.CoreFileKit';
import promptAction from '@ohos.promptAction';
@Entry
@Component
struct DownloadPage {
@State message: string = 'Hello World';
@State isShowProgress: boolean = false;
build() {
Row() {
Column() {
Button("下载").onClick(async ()=>{
console.log("1")
let res:AxiosResponse=await axios(
// "http://m804.music.126.net/20241117075918/8d6bdbcd1b021f293361ea41f50f9f17/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/9444693488/94b2/45cb/21d6/9e34cbd9902ee8a917e6d0781557b94e.mp3?authSecret=000001933753cb5d08d80a3b19341b18"
"https://pic.rmb.bdstatic.com/bjh/c305e5a85f66835661f880b24b9876be9233.png"
)
//直接强转为文件流数据
let dvp=new picker.DocumentViewPicker()
//打开保存文件操作
let result= await dvp.save({newFileNames:[Date.now()+'1.png']})
let path=result[0]
let f = fs.openSync(path,fs.OpenMode.CREATE|fs.OpenMode.WRITE_ONLY)
fs.writeSync(f.fd,res.data)
fs.closeSync(f)//关闭文件
console.log("保存路径为::"+JSON.stringify(result))
})
}
.width('100%')
}
.height('100%')
}
}
选择文件保存路径:
打开文件夹-下载目录可以看到下载的图片了
直接在模拟器上预览图