微信小程序预览二进制流文件

这篇具有很好参考价值的文章主要介绍了微信小程序预览二进制流文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开发时使用调试基准库版本

微信小程序预览二进制流文件

需求

在线预览doc/xls/xlsx/ppt/txt/pdf 的文件和图片。

思路

  1. 将后台返回的二进制流,写入微信的文件管理器。
  2. 打开文件。

根据文件类型调用不同预览方法

wx.openDoucument不支持预览txt文件。

    bindTapFile: function (e) {
      let currentPage = this;
      let { objectId, name, filetype } = e.currentTarget.dataset.file;
      let fileType = name.split(".").pop().toLowerCase();
      if (
        ["doc", "docx", "xls", "xlsx", "ppt", "pptx", "pdf"].includes(fileType)
      ) {
        currentPage.binaryPreview(objectId, name, filetype);
      } else if (["txt"].includes(fileType)) {
        currentPage.downloadFilePreview(objectId, name, filetype, true);
      }
    },

原本写的预览方法,安卓不支持

原本都是调用这个方法,根据isTxt判断是否为文本文件做不同的操作。在安卓真机调试发现打开失败,说找不到路径。

    downloadFilePreview: function (objectId, name, type, isTxt = false) {
      let currentPage = this;
      let filePath = `${wx.env.USER_DATA_PATH}/${name}`;
      ui.showLoading("加载中……");
      wx.downloadFile({
        url: `${app.globalData.loscamUrl}...`,
        filePath: filePath, // 自定义文件的名称
        method: "GET",
        header: {
          Authorization: "Bearer " + token.access_token,
        },
        success(res) {
          let Path = res.filePath;
          let fs = wx.getFileSystemManager();
          fs.getFileInfo({
            filePath: Path,
            success: (f) => {
              fs.saveFile({
                tempFilePath: Path ?? filePath,
                filePath: filePath,
              });
              if (isTxt) {
                let textContent = fs.readFileSync(filePath, "utf-8");
                currentPage.goTxtPage(name, textContent);
              } else {
                // 现api支持doc docx xls xlsx ppt pptx pdf
                wx.openDocument({
                  filePath: Path ?? filePath,
                  showMenu: true,
                  fileType: type,
                  success: function (res) {
                    console.log("打开文档成功");
                  },
                  fail: function (err) {
                    console.log("打开文档失败:", err);
                  },
                });
              }
            },
          });
        },
        complete() {
          setTimeout(() => {
            ui.hideLoading();
          }, 1000);
        },
      });
    },

苹果、安卓真机均可预览文件

    binaryPreview: function (objectId, name, type) {
      let filePath = `${wx.env.USER_DATA_PATH}/${name}`;
      ui.showLoading("加载中……");
      wx.request({
        url: `${app.globalData.loscamUrl}...`,
        header: {
          Authorization: "Bearer " + token.access_token,
        },
        method: "GET",
        responseType: "arraybuffer", //此处是请求文件流,必须带入的属性
        success: (rest) => {
          if (rest.statusCode === 200) {
            const fs = wx.getFileSystemManager(); //获取全局唯一的文件管理器
            fs.writeFile({
              // 写文件
              filePath: filePath,
              data: rest.data,
              encoding: "binary",
              success(res) {
                wx.openDocument({
                  filePath: filePath, //拿上面存入的文件路径
                  showMenu: true,
                  success: function (res) {
                    console.log("open success");
                  },
                  fail: function (err) {
                    console.log("open fail", err);
                  },
                });
              },
            });
          }
        },
        complete() {
          setTimeout(() => {
            ui.hideLoading();
          }, 1000);
        },
      });
    },

预览图片

缩略图预览(增加请求头部)

效果图
微信小程序预览二进制流文件
代码实现

    downloadImgToTemUrl(imgObjectId, imgName) {
      let currentPage = this;
      wx.downloadFile({
        url: `${app.globalData.loscamUrl}/file/downloadfile?fileUrl=${imgObjectId}`,
        filePath: `${wx.env.USER_DATA_PATH}/${encodeURIComponent(imgName)}`, // 自定义文件的名称
        method: "GET",
        header: {
          Authorization: "Bearer " + currentPage.data.access_token,
        },
        success(res) {
          let path = wx
            .getFileSystemManager()
            .readFileSync(res.filePath, "base64");
          currentPage.properties.fileList.forEach((x, i) => {
            if (imgObjectId == x.objectId) {
              currentPage.setData({
                ["fileList[" + i + "].imgToTemUrl"]: `data:image/jpg;base64,${path}`,
              });
            }
          });
        },
        complete() {},
      });
    },

点击缩略图预览图片

效果图
微信小程序预览二进制流文件

代码实现
注意点:路径含有中文的图片预览不了。
改正:将图片的名字改为全英文字符就可以了。

    bindImgPreview: function (e) {
      let { name, idx } = e.currentTarget.dataset;
      let currentIndex = -1;
      let currentPage = this;
      let urls = currentPage.data.urls;
      urls.forEach((x, i) => {
        if (x == `${wx.env.USER_DATA_PATH}/${name}`) {
          currentIndex = i;
          return;
        }
      });
      wx.previewImage({
        current: urls[currentIndex],
        urls: urls,
        success(res) {
          console.log("预览成功");
        },
        fail(err) {
          console.log("预览失败,原因:", err);
        },
        complete() {},
      });
    },

最后

如果你有更好的办法可以相互交流,共同进步!文章来源地址https://www.toymoban.com/news/detail-483609.html

到了这里,关于微信小程序预览二进制流文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 后端返回二进制流,前端处理二进制文件流,实现预览图片以及PDF

    1、首先预览PDF需要 后端 将响应头 Content-Type 设置为PDF类型 application/pdf ,不能预览,会直接下载 2、 前端 定义接口:并设置相应类型 responseType 为 blob 请求数据:通过 window.URL.createObjectURL(res) 转成本地预览地址, 在通过 window.open() 方法打开转成本地预览地址即可预览PDF,如下

    2024年02月15日
    浏览(39)
  • uniapp开发小程序-pc端小程序下载后端接口的二进制流文件

    fileName 包含文件名+后缀名,比如 test.png 这种格式 api.DownloadTmtFile 后端接口返回的是文件的二进制流 值得注意的是,微信开发者工具中是测试不了 wx.saveFileToDisk 的,需要真机或者体验版测试

    2024年02月04日
    浏览(48)
  • 损坏的二进制文件会导致“程序太大而无法放入内存”

    不知道你是否做过这样的小实验:将一个可执行文件的头部写入一些无效的数据,或者将一个根本不是可执行文件的大型文件的扩展名改为”.exe”,然后执行它(警告,请记得先保存好工作文件)。 文件不会如预期般那样执行,你会得到一个提示:”程序太大而无法装入到内存

    2024年02月09日
    浏览(33)
  • vue2实现二进制流pdf浏览器预览功能

    该方法不需要使用插件  获取后端二进制文件流后直接处理 然后点击调用方法使用

    2024年01月20日
    浏览(50)
  • 07-2_Qt 5.9 C++开发指南_二进制文件读写(stm和dat格式)

    除了文本文件之外,其他需要按照一定的格式定义读写的文件都称为二进制文件 。每种格式的二进制文件都有自己的格式定义,写入数据时按照一定的顺序写入,读出时也按照相应的顺序读出。例如地球物理中常用的 SEG-Y 格式文件,必须按照其标准格式要求写入数据才符合

    2024年02月13日
    浏览(31)
  • 单片机二进制bin(map、反汇编)文件分析(IAP程序跳转,PC指针指向问题分析)

       .bin 文件就是二进制文件(binary file),这种文件只包含机器码。所有的数据都是机器可以执行的指令码、指令参数或者常量数据,不包含其它调试信息。加载到内存或者支持XIP(就地执行)的存储器中规定好的加载地址之后直接从规定好的运行地址开始运行即可。   

    2024年02月03日
    浏览(41)
  • 将数据转二进制流文件,用PostMan发送二进制流请求

    一、将byte数组转二进制流文件,并保存到本地 byte [] oneshotBytes=new byte[]{78,-29,51,-125,86,-105,56,82,-94,-115,-22,-105,0,-45,-48,-114,27,13,38,45,-24,-15,-13,46,88,-90,-66,-29,52,-23,40,-2,116,2,-115,17,36,15,-84,88,-72,22,-86,41,-90,-19,-58,19,99,-4,-63,29,51,-69,117,-120,121,3,-103,-75,44,64,-58,-34,73,-22,110,-90,92,-35,-18,-128,16,-

    2024年02月15日
    浏览(29)
  • java图片转二进制流_java将文件转化成二进制流

    二进制流的主要编码格式是base64码。可以在网上找一些在线转base64编码的网站进行尝试转换。 例如:http://imgbase64.duoshitong.com/然后通过前端展现和下载。 前端显示二进制流图片(src中放置base64码及二进制流) 前端下载二进制流文件(herf中放置base64码及二进制流,download后面放

    2024年02月06日
    浏览(44)
  • Linux查看二进制文件

    hexdump 、 hd 、 od 、 xxd hexdump 、 hd 可以使用16进制、10进制、8进制、 ascii 码的形式查看文件。 执行 就会看到hd其实只是hexdump的一个软链接。 使用 man hexdump ,可以查看 hexdump 的各种参数。 length and offset 参数后面可以跟后缀KiB(=1024)、MiB(=1024 1024),依此类推GiB、TiB、PiB、

    2024年02月08日
    浏览(38)
  • 【VSCode】查看二进制文件

    1.安装插件Hex Editor 2.打开二进制文件 3.执行Hex Editor命令

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包