收藏
回答

wx.downloadFile中的url参数填入带有中文的文件路径后,无法下载正确的文件?

需求点:使用wx.downloadFile()、wx.openDocument()两个API配合,下载预览文件并分享,

版本库:2.11.3

问题:wx.downloadFile()的 url 参数填入的路径中带有中文,请求API时,文件路径中的中文被转码了,导致下载不了正确的文件,tempFilePath返回的是后缀.bin的文件,wx.openDocument()无法打开预览,请问大佬们有遇到过这问题么,要怎么解决呢?麻烦大大们解答一下

回答关注问题邀请回答
收藏

1 个回答

  • jfengz
    jfengz
    2020-07-15

    问题解决了:

    之前说后端接口返回的文件路径带有中文,使用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,
          successres => {
            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)
          },
          failerr => {
            console.log(err)
            // 新建自定义目录
            manage.mkdir({
              dirPath: cachePath,
              recursivetrue,
              successres => {
                console.log('创建成功')
                this.openFileEv(cachePath, newFileName, downLoadPath)
              },
              failerr => {
                console.log('创建失败')
              }
            })
          }
        })
      },
      // 打开文件
      openFileEv (cachePath, newFileName, downLoadPath) {
        const manage = wx.getFileSystemManager()
        wx.showLoading({
          title'加载中',
          masktrue,
          successfunction () {
            wx.downloadFile({
              // 示例 url,并非真实存在
              url: downLoadPath,
              successfunction (res{
                if (res.statusCode === 200) {
                  wx.hideLoading()
                  manage.saveFileSync(res.tempFilePath, cachePath + '/' + newFileName)
                  // 打开文档
                  wx.openDocument({
                    filePath: cachePath + '/' + newFileName,
                    showMenutrue,
                    successfunction (res{
                      console.log('打开文档成功')
                    },
                    failfunction () {
                      console.log('打开失败')
                    }
                  })
                }
              }
            })
          }
        })
      }
    
    2020-07-15
    有用 1
    回复
登录 后发表内容
问题标签