解决调用wx.downLoadFile下载的文件名乱码(长串英文字符)问题

这两天遇到一个需求,将统计数据生成的excel表在小程序中下载。

第一次在小程序中碰到下载的需求,一开始想像之前做公众号h5页面一样的方法直接用a标签下载附件,后来想起来小程序不支持a标签。

查了一下微信里面下载附件的,是用wx.downLoadFile来实现的。实际操作以后,发现下载下来的附件,文件名是一长串奇怪的英文,并不是像想象中一样可以自定义。这样如果用户保存之后想要找到这个文件,但是下载的文件太多了,名字又都是乱码,一方面不好找,另一方面看起来很乱。但是查看文档之后发现wx.downLoadFile中并没有用来记录文件名的参数,因此想到先运用wx.saveFile将临时文件保存下来,再修改文件名。

附文档地址:
微信小程序开发文档 - wx.downLoadFile
微信小程序开发文档 - wx.saveFile

这里运用FileSystemManager.rename,将文件名修改为自己想要的名字,即可解决问题。

注意,在使用之前要先获取全局唯一的文件管理器,即:
const FileSystemManager = wx.getFileSystemManager();
否则会报错FileSystemManager is not defined。

这里还有几个坑。

首先是,FileSystemManager.rename在使用时,报错fail permission denied。查了一下,需要在目标文件名前加上wx.env.USER_DATA_PATH,即:“newPath: wx.env.USER_DATA_PATH + ‘/1.png’”。其中,1.png是我的新文件名和后缀。

修改后,继续报错,原来是我路径写错了,我在文件名前面少了一个“/”符号,即:(上面的路径为了不误导,用的是正确的,请大家自行检查自己的路径是否有错误)

我的错误的路径‘newPath: wx.env.USER_DATA_PATH + ‘1.png’’

正确的路径‘newPath: wx.env.USER_DATA_PATH + ‘/1.png’’

一定要细心。

这样重命名后即可解决问题。

但我在回归测试的时候又遇到了一个问题,还是FileSystemManager.rename方法,报错rename: fail

既然是回归测试出了问题,说明第一次是可行的。

检查了半天代码,后来想到,我下载的是同一份文件,重命名时命名也是同一个名字,重名了,所以重命名失败。

这里errMsg里面是不会写清楚具体原因的,只有一个fail。所以要仔细查看自己的代码,看看问题具体出在了哪里。

找到问题就好办了。只要在重命名失败的方法里,将之前下载的文件删掉,重新再给新的文件命名就可以了。这里最好先用FileSystemManager.getFileInfo找一下这个重复的名字,找到了再调FileSystemManager.removeSavedFile进行删除,防止找不到或者删错了等情况发生。

因为这几个方法请求回调都很简单,全部都是小程序开发文档里的内容,就不另外贴项目代码了。没明白可以去小程序开发文档查询对应使用方法或询问我。

附文档地址:
微信小程序开发文档 - getFileSystemManager
微信小程序开发文档 - FileSystemManager

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值