vodaPay小程序沙箱环境无法预览PDF文件问题咨询
vodaPay小程序沙箱环境PDF预览问题
问题现象
- 模拟器环境:预览时弹出提示「PDF模拟预览成功,请前往真机调试」,可正常下载PDF文件
- 沙箱真机环境:操作失败,提示「文件类型不是PDF」
相关代码
my.downloadFile({ url: fileUrl, success: (res) => { my.hideLoading(); console.log(res); if(!res.apFilePath){ my.alert({ title: '下载失败', content: "未找到文件" }); } const filePath = res.apFilePath; my.openDocument({ filePath: filePath, success: () => { console.log('PDF打开成功'); }, fail: (res) => { my.alert({ title: '打开文件错误', content: JSON.stringify(res) }); } }); }, fail: (res) => { my.hideLoading(); my.alert({ title: '下载失败', content: JSON.stringify(res) }); } });
沙箱设备报错信息
下载失败. ariver_ext: "za.co.vodacom.vodapay.appcontainer.plugin.mva.NewDownloadFileExtension" error: -1 errorMessage: "文件类型不是PDF" message: "文件类型不是PDF"
排查及解决建议
检查文件接口的Content-Type响应头
vodaPay沙箱的my.downloadFile会严格校验文件的Content-Type,而模拟器无此限制。确保文件接口返回的Content-Type为application/pdf,如果是application/octet-stream这类通用二进制类型,沙箱会判定文件不是PDF。手动添加PDF文件后缀
部分场景下下载的文件路径可能没有正确的.pdf后缀,导致my.openDocument无法识别。修改代码中文件路径的处理逻辑:
// 给下载后的文件路径添加.pdf后缀 const filePath = res.apFilePath + '.pdf';
注意:此方法仅适用于确认原文件确实是PDF的情况。
- 校验下载文件的实际MIME类型
下载成功后通过my.getFileInfo获取文件真实的MIME类型,确认后再调用打开方法:
my.downloadFile({ url: fileUrl, success: (res) => { my.hideLoading(); if(!res.apFilePath){ my.alert({ title: '下载失败', content: "未找到文件" }); return; } // 获取文件信息校验MIME类型 my.getFileInfo({ filePath: res.apFilePath, success: (infoRes) => { if (infoRes.mimeType === 'application/pdf') { my.openDocument({ filePath: res.apFilePath, success: () => console.log('PDF打开成功'), fail: (err) => my.alert({ title: '打开文件错误', content: JSON.stringify(err) }) }); } else { my.alert({ title: '错误', content: '下载的文件不是PDF格式' }); } }, fail: () => my.alert({ title: '错误', content: '无法获取文件信息' }) }); }, fail: (res) => { my.hideLoading(); my.alert({ title: '下载失败', content: JSON.stringify(res) }); } });
- 测试标准PDF文件
使用一个小体积的标准PDF文件进行测试,排除文件本身编码、格式异常导致的沙箱识别失败问题。
内容的提问来源于stack exchange,提问作者Bilal Haider
相关产品推荐
相关产品推荐

