最近有用到微信小程序的downloadFile接口,但是在真机上出现了文件后缀为unknown,导致文件保存失败,记录下解决办法。
出问题的下载实现代码(直接调用downloadFile API):
/* 直接这样写的话,会出现下载文件后缀名为unknown的情况 */ wx.downloadFile({ url: '', success (res) { console.log(res.filePath); } })
改进后的下载保存代码(成功下载):
/* 使用时间戳为下载后的文件的名字 */ let fileName = new Date().valueOf(); wx.downloadFile({ /* url 为要下载的文件链接 */ url: '', /* filePath指定文件下载后存储的路径,wx.env.USER_DATA_PATH */ filePath: wx.env.USER_DATA_PATH + '/' + fileName + '.mp4', success: res => { let filePath = res.filePath; wx.saveVideoToPhotosAlbum({ filePath, success: file => { wx.hideLoading(); /* 删除缓存 */ let fileMgr = wx.getFileSystemManager(); fileMgr.unlink({ filePath: wx.env.USER_DATA_PATH + '/' + fileName + '.mp4', success: function (r) { }, }) }, fail: err => { wx.hideLoading(); /* 拒绝授权时显示 */ if (err.errMsg === 'saveVideoToPhotosAlbum:fail auth deny') { wx.showModal({ title: '提示', content: '需要您授权保存相册', showCancel: false, success: data => { /* 打开权限设置 */ wx.openSetting({ success: setting => { if (setting.authSetting['scope.writePhotosAlbum']) { wx.showModal({ title: '提示', content: '获取权限成功,再次点击下载即可保存', showCancel: false, }) } else { wx.showModal({ title: '提示', content: '获取权限失败,将无法保存到相册哦', showCancel: false, }) } }, }) } }) } }, }, fail: err => { wx.hideLoading(); if (err.errMsg == 'downloadFile:fail createDownloadTask:fail url not in domain list') { wx.showToast({ title: '服务器错误,请联系相关管理员', icon: 'none' }) } }, complete: () => { wx.hideLoading(); } })
上面代码实现的是下载视频,如果下载的是图片,那么将 saveVideoToPhotosAlbum
改成 saveImageToPhotosAlbum
即可。