s***@topnet.net.cn
s***@topnet.net.cn
  • 发布:2023-10-12 19:08
  • 更新:2023-10-13 10:40
  • 阅读:309

uni.openDocument 是否可以打开二进制文件流

分类:uni-app


【之前预览正常】:
使用uni.openDocument打开pdf、word等文件是正常的(之前后端返回的是文件对应的地址)。
控制台打印预览的结果【附件“之前”】

【现在无法正常预览】:
最近后端返回的文件格式变了,改成了文件流,使用uni.openDocument无法正常打开。
控制台打印预览的结果【附件“现在”】
预览时就会让选择第三方工具打开【如附件1】

【问题】:
1、如果后端返回文件流,怎么实现pdf等文件的正常预览?

【问题解决】:
后端调整content-type的值,如附件“解决”,这种格式是可以直接预览的

【代码】:

uni.downloadFile({  
        url: this.fileUrl, //下载地址接口返回  
        success: (data) => {  
          console.log(data, '=================');  
          if (data.statusCode === 200) {  
            //隐藏加载框  
            uni.hideLoading();  
            //文件保存到本地  
            uni.getFileSystemManager().saveFile({  
              tempFilePath: data.tempFilePath, //临时路径  
              success: (red) => {  
                //转化为小写  
                const finalType = this.fileType;  
                const imgTypes = ['jpg', 'png', 'jpeg', 'gif'];  
                const fileTypes = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf'];  
                //图片通过webView预览  
                if (imgTypes.findIndex((v) => v === finalType) !== -1) {  
                  uni.navigateTo({  
                    url: `/pages/webView/webView?src=${encodeURIComponent(red.savedFilePath)}`,  
                  });  
                  this.close();  
                  return;  
                }  
                // 文件预览  
                if (fileTypes.findIndex((v) => v === finalType) !== -1) {  
                  console.log(red.savedFilePath, 'open的地址');  
                  uni.openDocument({  
                    filePath: red.savedFilePath,  
                    success: (sus) => {  
                      console.log('成功打开', sus);  
                    },  
                  });  
                  this.close();  
                  return;  
                }  
                //系统中不包含的文件  
                uni.$u.toast('当前文件格式不支持预览');  
                this.close();  
              },  
            });  
          }  
        },  
        fail: (err) => {  
          console.log(err);  
          uni.$u.toast('文件下载失败');  
        },  
      });
2023-10-12 19:08 负责人:无 分享
已邀请:
xinqianbobo

xinqianbobo

尝试跟后端沟通一下,
后端需要在 content-type里面,填写返回文件的类型,设置了以后就可以正常下载预览了

  • s***@topnet.net.cn (作者)

    最终就是通过这个方式解决的,感谢!

    2023-10-13 16:06

xinqianbobo

xinqianbobo

再不行就试试 getFileSystemManager, 自己把文件以已知的文件后缀类型缓存到本地,然后再预览?

要回复问题请先登录注册