小程序
小游戏
企业微信
微信支付
扫描小程序码分享
需求点:使用wx.downloadFile()、wx.openDocument()两个API配合,下载预览文件并分享,
版本库:2.11.3
问题:wx.downloadFile()的 url 参数填入的路径中带有中文,请求API时,文件路径中的中文被转码了,导致下载不了正确的文件,tempFilePath返回的是后缀.bin的文件,wx.openDocument()无法打开预览,请问大佬们有遇到过这问题么,要怎么解决呢?麻烦大大们解答一下
1 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
问题解决了:
之前说后端接口返回的文件路径带有中文,使用wx.downloadFile()下载,res.tempFilePath返回的是后缀.bin的文件,无法打开预览,配合使用wx.FileSystemManager()的几个API,保存重命名后可以打开预览了,详细可看一下代码👇
// 创建存放目录 createCatalog (e) { const rootPath = wx.env.USER_DATA_PATH const cachePath = rootPath + '/openFileCache' const manage = wx.getFileSystemManager() let newFileName = '' let fileType = '' let downLoadPath = e.currentTarget.dataset.path if (e.currentTarget.dataset.path.indexOf('.xlsx') !== -1) { fileType = '.xlsx' } else if (e.currentTarget.dataset.path.indexOf('.xls') !== -1) { fileType = '.xls' } else if (e.currentTarget.dataset.path.indexOf('.pdf') !== -1) { fileType = '.pdf' } newFileName = this.data.recordData[e.currentTarget.dataset.idx].title + fileType // 判断是否已存在自定义目录 manage.access({ path: cachePath, success: res => { console.log(res) let readdir = manage.readdirSync(cachePath) console.log(readdir) for (let path of readdir) { manage.unlinkSync(cachePath + '/' + path) } this.openFileEv(cachePath, newFileName, downLoadPath) }, fail: err => { console.log(err) // 新建自定义目录 manage.mkdir({ dirPath: cachePath, recursive: true, success: res => { console.log('创建成功') this.openFileEv(cachePath, newFileName, downLoadPath) }, fail: err => { console.log('创建失败') } }) } }) }, // 打开文件 openFileEv (cachePath, newFileName, downLoadPath) { const manage = wx.getFileSystemManager() wx.showLoading({ title: '加载中', mask: true, success: function () { wx.downloadFile({ // 示例 url,并非真实存在 url: downLoadPath, success: function (res) { if (res.statusCode === 200) { wx.hideLoading() manage.saveFileSync(res.tempFilePath, cachePath + '/' + newFileName) // 打开文档 wx.openDocument({ filePath: cachePath + '/' + newFileName, showMenu: true, success: function (res) { console.log('打开文档成功') }, fail: function () { console.log('打开失败') } }) } } }) } }) }
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
问题解决了:
之前说后端接口返回的文件路径带有中文,使用wx.downloadFile()下载,res.tempFilePath返回的是后缀.bin的文件,无法打开预览,配合使用wx.FileSystemManager()的几个API,保存重命名后可以打开预览了,详细可看一下代码👇
// 创建存放目录 createCatalog (e) { const rootPath = wx.env.USER_DATA_PATH const cachePath = rootPath + '/openFileCache' const manage = wx.getFileSystemManager() let newFileName = '' let fileType = '' let downLoadPath = e.currentTarget.dataset.path if (e.currentTarget.dataset.path.indexOf('.xlsx') !== -1) { fileType = '.xlsx' } else if (e.currentTarget.dataset.path.indexOf('.xls') !== -1) { fileType = '.xls' } else if (e.currentTarget.dataset.path.indexOf('.pdf') !== -1) { fileType = '.pdf' } newFileName = this.data.recordData[e.currentTarget.dataset.idx].title + fileType // 判断是否已存在自定义目录 manage.access({ path: cachePath, success: res => { console.log(res) let readdir = manage.readdirSync(cachePath) console.log(readdir) for (let path of readdir) { manage.unlinkSync(cachePath + '/' + path) } this.openFileEv(cachePath, newFileName, downLoadPath) }, fail: err => { console.log(err) // 新建自定义目录 manage.mkdir({ dirPath: cachePath, recursive: true, success: res => { console.log('创建成功') this.openFileEv(cachePath, newFileName, downLoadPath) }, fail: err => { console.log('创建失败') } }) } }) }, // 打开文件 openFileEv (cachePath, newFileName, downLoadPath) { const manage = wx.getFileSystemManager() wx.showLoading({ title: '加载中', mask: true, success: function () { wx.downloadFile({ // 示例 url,并非真实存在 url: downLoadPath, success: function (res) { if (res.statusCode === 200) { wx.hideLoading() manage.saveFileSync(res.tempFilePath, cachePath + '/' + newFileName) // 打开文档 wx.openDocument({ filePath: cachePath + '/' + newFileName, showMenu: true, success: function (res) { console.log('打开文档成功') }, fail: function () { console.log('打开失败') } }) } } }) } }) }