uni-app小程序pdf预览不可用

uni-app小程序pdf预览不可用

小程序端需要预览pdf文件,pdf存储在unicloud后台的云存储中

之前是可以预览的,最近发现正式版和不开调试的体验版中无法预览,请问什么原因?
是否是微信新加了限制?

代码如下:

uni.downloadFile({  
    url: this.base.pdf,  
    success: function(res) {  
        var filePath = res.tempFilePath;  
        uni.openDocument({  
            filePath: filePath,  
            success: function(res) {  
                console.log('打开文档成功');  
            }  
        });  
    }  
});

表格

信息类型 信息内容
开发环境 小程序端
版本号 未提及
项目创建方式 未提及

更多关于uni-app小程序pdf预览不可用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app小程序pdf预览不可用的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据您提供的信息,问题很可能出在微信小程序平台的安全策略更新上。

主要原因分析:

  1. 微信小程序安全域名限制:微信小程序要求所有网络请求(包括下载文件)的域名必须在小程序后台的「开发设置」-「服务器域名」中配置。您从 uniCloud 云存储下载 PDF 时,其域名(如 tcb-api.tencentcloudapi.com 或您自定义的域名)必须加入 downloadFile 的合法域名列表中。
  2. 临时文件路径问题uni.downloadFile 下载成功后返回的临时文件路径,在非调试模式下(正式版、体验版)会受到更严格的安全校验。如果该文件不是通过合法域名下载,或文件类型被限制,uni.openDocument 将无法打开。
  3. 云存储直链访问:uniCloud 云存储的默认域名可能未被加入小程序合法域名列表,导致下载被拦截。

解决方案:

  1. 检查并配置域名

    • 登录微信小程序后台,在「开发」-「开发设置」-「服务器域名」中,将 downloadFile 合法域名设置为云存储的实际域名(例如:https://tcb-api.tencentcloudapi.com 或您的自定义域名)。
    • 确保云存储文件链接的域名与配置一致。
  2. 使用云存储的临时链接(推荐):

    • 通过 uniCloud API 获取文件的临时下载链接,该链接通常带有签名参数,且域名已符合微信要求。示例:
    // 引入 uniCloud 模块后
    uniCloud.downloadFile({
        fileID: this.base.pdf, // 云存储文件 ID
        success: res => {
            uni.openDocument({
                filePath: res.tempFilePath,
                success: () => console.log('打开成功')
            });
        }
    });
回到顶部