HarmonyOS Next鸿蒙开发:下载文件

195 阅读1分钟

我们做项目过程中难免会有下载文件的场景,那么下载文件会涉及到一个是文件保存到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

image.png

保存文件

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%')
  }
}

image.png

选择文件保存路径:

image.png

打开文件夹-下载目录可以看到下载的图片了 image.png

直接在模拟器上预览图 image.png