uni-app savefile 保存doc文件时提示文件没有发现

uni-app savefile 保存doc文件时提示文件没有发现

开发环境 版本号 项目创建方式
Mac 11.2.3 HBuilderX

示例代码:

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 savefile 保存doc文件时提示文件没有发现的实战教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

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

更多关于uni-app savefile 保存doc文件时提示文件没有发现的实战教程也可以访问 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的 不知道你们服务端做了什么…

根据你的代码和错误信息,这个问题通常是由于文件路径处理不当导致的。以下是几个关键点:

  1. 临时文件路径问题downloadFile 返回的 tempFilePath 在 iOS 上可能不是直接可用的文件路径。特别是当文件是 PDF 或其他文档格式时,需要确保文件已完全下载并保存到本地。

  2. 文件保存:建议在下载成功后,使用 uni.saveFile 将临时文件保存到本地永久存储,然后再用保存后的路径打开文档。修改后的代码示例如下:

openDocument() {    
  uni.downloadFile({    
    url: 'http://122.9.134.74:9530/jeeplus-vue/userfiles/bussinessFlie/hr/CrrcPaList/2021/12/testpdf.pdf',    
    success: (res) => {    
      if (res.statusCode === 200) {    
        const tempFilePath = res.tempFilePath;    
        uni.saveFile({    
          tempFilePath: tempFilePath,    
          success: (saveRes) => {    
            const savedFilePath = saveRes.savedFilePath;    
            uni.openDocument({    
              filePath: savedFilePath,    
              success: () => {    
                console.log('打开文档成功');    
              },    
              fail: (openRes) => {    
                console.log('打开文档失败', openRes);    
              }    
            });    
          },    
          fail: (saveErr) => {    
            console.log('保存文件失败', saveErr);    
          }    
        });    
      }    
    },    
    fail: (downloadErr) => {    
      console.log('下载文件失败', downloadErr);    
    }    
  });    
}
回到顶部