uni-app openDocument ios 提示文件不存在

uni-app openDocument ios 提示文件不存在

开发环境 版本号 项目创建方式
Mac 11.2.3 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Mac

PC开发环境操作系统版本号:11.2.3

HBuilderX类型:正式

HBuilderX版本号:3.2.16

手机系统:iOS

手机系统版本号:iOS 15

手机厂商:苹果

手机机型:iphone11

页面类型:vue

vue版本:vue2

打包方式:云端

项目创建方式:HBuilderX

### 示例代码:

```javascript
openDocument() {    
  uni.downloadFile({    
    url: 'http://122.9.134.74:9530/jeeplus-vue/userfiles/bussinessFlie/hr/CrrcPaList/2021/12/testpdf.pdf',    
    success: (res) => {    
      console.log(res)    
      uni.openDocument({    
        filePath: res.tempFilePath,    
        success: () => {    
          console.log('打开文档成功');    
        },    
        fail(res) {    
          console.log(res)    
        }    
      });    
    }    
  });    
},  

操作步骤:

  • 点击 url 预览文件

预期结果:

  • 软件内打开文件

实际结果:

  • 提示
{
  "errMsg": "openDocument:fail 文件不存在,https://ask.dcloud.net.cn/article/282",
  "errCode": -4,
  "code": -4
}

bug描述:

ios直接预览文件 ,download提示都成功 但是打开时提示

{
  "errMsg": "openDocument:fail 文件不存在,https://ask.dcloud.net.cn/article/282",
  "errCode": -4,
  "code": -4
}

更多关于uni-app openDocument ios 提示文件不存在的实战教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

此版本使用其他设备是否正常?仅这个设备出现问题吗?

更多关于uni-app openDocument ios 提示文件不存在的实战教程也可以访问 https://www.itying.com/category-93-b0.html


只测过这一个设备 你那边试过我提供的url 吗

url 携带的信息是有什么特殊的吗 ios 的http response中需要指定啥参数吗, 我在示例中有些url 在ios可以打开

回复 1***@163.com: 你的respose 中的 content-Type 无效

我两种方式验证了下 1.浏览器下载了pdf 本地起个web服务正常 2.手机抓包 发现 http的response 的 content-type 无效

回复 天生DR: 加上了content-type 也还是不行

回复 1***@163.com: 你本地起个web 服务 然后把这个文件 试一下 然后对比一下服务端是不是有什么特殊限制

回复 天生DR: 你的意思将uniapp 用web打开 ?

回复 1***@163.com: 就是你本地模拟服务器 起个服务 我这边是OK的 不知道你们服务端做了什么…

这个问题通常是由于iOS系统对文件路径的安全限制导致的。以下是几个关键点:

  1. 临时文件路径问题:iOS系统对临时文件的访问有严格限制,downloadFile返回的临时文件路径可能无法被openDocument直接访问。

  2. 解决方案

    • 使用uni.saveFile将文件保存到本地永久存储后再打开:
    uni.downloadFile({
      url: 'your_url',
      success: (res) => {
        uni.saveFile({
          tempFilePath: res.tempFilePath,
          success: (savedRes) => {
            uni.openDocument({
              filePath: savedRes.savedFilePath,
              success: () => {
                console.log('打开成功');
              }
            });
          }
        });
      }
    });
回到顶部