UniApp H5端属于企业微信内部的自建应用,属于微信生态下实现的功能应用,文件预览逻辑是点击文件链接以后请求文件下载接口,下载后自动跳转至企业微信内部自带的文件预览页面,安卓端有一个中间页面是文件详情页面,如果文件下载快的话,只需要在文件详情页面请求一次,然后就跳转到预览页面,如果在详情页面没下载完成会自动跳转到预览页面进行第二次下载

存在的问题点:

在安卓端企业微信进行文件下载预览时出现文件下载失败的问题,使用第三方应用打开时也报错,截图如下

而在IOS端文件可以正常预览和下载,并且IOS端没有安卓端的文件详情,而是直接打开了文件

原因分析:

如下图所示,通过抓取一次安卓端文件预览的网络请求包可以发现,安卓端实际上是做了两次请求,其中用户感知到的是第二次请求,第二次下载文件失败的原因在于,文件下载API中对文件下载链接做了限制,每个下载链接仅允许请求一次,第2次请求会报下载链接失败,所以导致该问题。

解决办法:

根据后端接口逻辑,修改文件下载链接可以请求的次数,或延迟下载链接有效时间

有些API是通过redis来管理链接有效性的,文件链接的有效性管控是通过将文件id存在redis里面,当文件下载链接被点击之后校验该文件是否在redis里面来判断该文件是否允许下载,允许下载的话删除该redis key,同时返回文件下载地址,防止地址用于第二次下载

为解决上述问题,修改下载逻辑,点击链接后首先将文件key有效时间设置为10秒,也就是说第一次请求之后该链接在接下来的10秒是有效的,防止企业微信多次请求无效的链接

更多推荐