鸿蒙中下载图片或者解压文件资源

"requestPermissions": [{
      "name": "ohos.permission.INTERNET"
    }]

首先在moudel.json5中设置可以使用网络资源

在模拟机上下载图片

@State lhAvtar: image.PixelMap | undefined = undefined  //设置图片格式
Image(this.lhAvtar)
        .width("80%")
      Button("下载文件")
        .onClick(() => {
          let context = getContext() as common.UIAbilityContext
          let savePath = context.cacheDir + "/bb17.jpg"
          console.log("文件存储路径" + savePath)
          //这是一个下载任务
          request.downloadFile(context, {
            url: 'https://tse1-mm.cn.bing.net/th/id/OIP-C.7bKejmgDmqo0ENnTutxs3QHaEK?w=296&h=180&c=7&r=0&o=5&dpr=1.3&pid=1.7',
            filePath: savePath //存储路径
          }).then(res => {
            console.log(res + '')
            //完成
            res.on("complete", () => {
              console.log("下载完成")
              console.log(fs.listFileSync(context.cacheDir).toString())
              //此处队ImgRource对已经下载的图片资源进行处理
              let file = fs.openSync(savePath) //打开文件获取文件信息
              let imageSource = image.createImageSource(file.fd) //创建一个imageSource,以后我们对图片的修改或者编辑都是用他
              this.lhAvtar = imageSource.createPixelMapSync()
              console.log(this.lhAvtar + '')
            })
            res.on("progress", (receivedSize, totalSize) => {
              console.log(`下载中:${receivedSize}/${totalSize}`)
            })
          })

        })

封装下载请求

//context是上下文
//url是网络资源地址
//file是
function loadFileServer(context: common.UIAbilityContext, url: string, file: string, cb: () => void) {
  let savePath = context.cacheDir + "/bb17.jpg"
  console.log("文件存储路径" + savePath)
  //这是一个下载任务
  request.downloadFile(context, {
    url,
    filePath: file //存储路径
  }).then(res => {
    console.log(res + '')
    //完成
    res.on("complete", () => {
      console.log("下载完成")
      console.log(fs.listFileSync(context.cacheDir).toString())
      //此处队ImgRource对已经下载的图片资源进行处理
      // let file=fs.openSync(savePath)//打开文件获取文件信息
      // let imageSource=image.createImageSource(file.fd) //创建一个imageSource,以后我们对图片的修改或者编辑都是用他
      // this.lhAvtar= imageSource.createPixelMapSync()
      // console.log(this.lhAvtar+'')
      //下载完成之后调用回调函数通知外部
      cb()
    })
    res.on("progress", (receivedSize, totalSize) => {
      console.log(`下载中:${receivedSize}/${totalSize}`)
    })
  })
}

解压调用这个函数(192.168.14.24是ip地址)以我的电脑为服务器

Button("下载压缩包")
        .onClick(()=>{
          let context = getContext() as common.UIAbilityContext
          let savePath=context.cacheDir+"/tmpavatars/"+"113.zip"
          fs.rmdirSync(context.cacheDir+'/tmpavatars') //删除文件夹
          fs.mkdirSync(context.cacheDir+'/tmpavatars') //创建文件夹
          loadFileServer(context,"http://192.168.14.24:5500/ok1.zip",savePath,()=>{
            //下载成功之后调用这个回调函数
            console.log(fs.listFileSync(context.cacheDir+"/tmpavatars").toString()) //下载成功之后打印一下我的文件名
            let outfiles=context.cacheDir+"/tmpavatars/"+"outfiles"
            // fs.rmdirSync(outfiles)
            fs.mkdirSync(outfiles)
            zlib.decompressFile(savePath,outfiles,(err)=>{
              if(err){
                console.log(err.message)
                return
              }
              console.log("成功了")
              console.log("解压之后的文件为"+fs.listFileSync(outfiles).toString())
              fs.listFileSync(outfiles).forEach(item=>{
                let file=fs.openSync(outfiles+"/"+item)
                let imageSource=image.createImageSource(file.fd)
                // this.imgList.push(imageSource.createPixelMapSync())
              })
            })
          })
        })
let savePath = context.cacheDir + "/bb17.jpg" //获取的是沙箱里的地址
 let file = fs.openSync(savePath) //打开文件获取文件信息 里面有file的真实地址

你可能感兴趣的:(华为,harmonyos)