程序员

《微信小程序开发从入门到实战》学习四十三

2023-12-05  本文已影响0人  阿宅白石

4.3.3 下载文件

在小程序端,使用wx.cloud.downloadFile方法可以将文件从云空间下载至本地。代码如下:

   // 使用回调风格的API下载文件,会返回一个downloadTask对象

   const downloadTask = wx.cloud.downloadFile({

     fileID: 'cloud://xxx.png', //文件的FileID

     success: res => {

       //下载文件成功后会返回临时文件路径

       console.log(res.tempFilePath)

     },

     fail: err => {

       //handle error

     }

   })

   // 在downloadTask对象上可以设置下载进度的监听回调

   downloadTask.onProgressUpdate(res => {

     console.log('下载进度', res.progress)

     console.log('已经下载的数据长度', res.totalBytesWritten)

     console.log('预期需要下载的数据总长度', res.totalBytesExpectedToWrite)

   })

   // 也可以通过downloadTask上面的abort方法取消下载任务

   // downloadTask.abort()

   // 下载文件时同样也支持Promise风格的API,但是不再返回downloadTask对象

   wx.cloud.downloadFile({

     fileID: 'cloud://xxx.png'

   }).then(res => {

     //get temp file path

     console.log(res.tempFilePath)

   }).catch(error => {

     // handle error

   })

(实践的时候,复制之前上传的文件的fileID到代码的fileID来,下载文件下来。在调试台的打印输出那里,打印完进度条后是下载的文件的临时url,点开可以看到图片,在电脑里实在找不到下载文件的文件路径,至少我目前暂时找不到)

下载文件成功时,文件实际上是被下载到一个临时的地方,当小程序关闭后这个文件有可能会被清理。如果希望永久存储文件,则需要使用wx.saveFile API,代码如下:

wx.cloud.downloadFile({

    fileID: 'cloud://xxx.png', // 文件的FileID

    success: res => {

      wx.getFileSystemManager().saveFile({

        tempFilePath: res.tempFilePath,

        success(res2){ // 使用res2命名参数,区别于已经存在的res变量

          const savedFilePath = res2.savedFilePath //从success回调的参数中获取文件路径

          console.log(savedFilePath)

        }

      })

    }

(实际运行的时候,success写错了,写成了sucess,改正后,提示我wx.saveFile快过时了,要换成wx.getFileSystemManager().saveFile,最后运行完调试台输出文件路径是临时url,担心永久存储了文件,现在又找不到文件位置,删不掉,多下几次内存会不会爆,瑟瑟发抖 ,先这样,以后有时间再找找)

上一篇下一篇

猜你喜欢

热点阅读