《微信小程序开发从入门到实战》学习四十三
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,担心永久存储了文件,现在又找不到文件位置,删不掉,多下几次内存会不会爆,瑟瑟发抖 ,先这样,以后有时间再找找)