微信小程序接收二进制流文件(图片预览,文件打开)

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

 下面通过downloadOaFile接口获取到二进制流,即res.data

注意!!!直接用downloadOaFile获取的二进制流文件在写入时会导致文件损坏,必须在uni.request对象的属性中加上

uni.request({responseType: 'arraybuffer',...}) 

如果不加,默认是

responseType: 'text'

这一点非常重要,踩了好久的坑,而且这两点的区别在network的response中还看不出来,因为两者的res.data看上去都是二进制流

注:arraybuffer是js内置的类,用于操作二进制文件,和blob差不多,所以我感觉也可以将res.data转成arraybuffer,之后再用fs.write写入

下面是转为的arraybuffer的方案,但是由于没试过,我也不知道能不能成功

const textEncoder = new TextEncoder();
const arrayBuffer = textEncoder.encode(data).buffer;

const arrayBuffer是一个arrayBuffer对象,用buffer方法得到的

注:arraybuffer也可以通过new出来,它就是一段连续的内存空间,但是很神奇居然可以用变量申请内存大小如下

const arrayBuffer = new ArrayBuffer(len)//len可以是变量

但是不能直接操作arraybuffer,必须再arraybuffer上建立视图,从而进行写入和释放内存操作

const dataView = new DataView(arraybuffer);

参考`ArrayBuffer`对象到底是什么 简单读懂 - 掘金

接着用getFileSystemManager将二进制流写成文件

const fs = uni.getFileSystemManager(); //获取全局唯一的文件管理器

fs.writeFile({...})//将二进制流写成文件

 最后通过文件扩展名判断用uni.previewImage或者wx.openDocument这两个api打开图片还是文件

完整代码如下文章来源地址https://www.toymoban.com/news/detail-564952.html

        let filePath = wx.env.USER_DATA_PATH + "/"+item.storageFileName;
        console.log(1111111111,item)
        downloadOaFile({
          filePath:item.storageFileName,
          fileName:item.storageFileName,
        }).then(res=>{
          const fs = uni.getFileSystemManager(); //获取全局唯一的文件管理器
          // fs.access({
          //   path: wx.env.USER_DATA_PATH,
          //   success: function(res) {
          //     console.log("临时文件目录已存在",res);
          //   },
          //   fail: function(err) {
          //     console.log("临时文件目录不存在,现在创建目录",err);
          //     fs.mkdir({
          //       dirPath: wx.env.USER_DATA_PATH,
          //       recursive: true,
          //       success: function(res) {
          //         console.log("创建目录成功",res);
          //       },
          //       fail: function(err) {
          //         console.log("创建目录失败",err);
          //       }
          //     });
          //   }
          // })
          console.log(filePath)
          console.log(typeof filePath)


          fs.writeFile({ // 写文件
            filePath: filePath, // wx.env.USER_DATA_PATH 指定临时文件存入的路径,后面字符串自定义
            data: res.data,
            encoding: "binary", //二进制流文件必须是 binary
            success (res){
              let imgExtName = ['png','jpg']
              console.log("成功写入文件",res)
              if (imgExtName.indexOf(item.extname)>-1){
                uni.previewImage({
                  current:item.storageFileName,
                  urls:[filePath],
                  success: function (res) {
                    console.log("成功打开图片",res)
                    console.log(filePath)

                    // setTimeout(()=>{wx.hideLoading()},500)
                  },
                  fail(res){
                    console.log("失败打开图片",res);
                  }
                })
              }else{

                wx.openDocument({ // 新开页面打开文档
                  fileType:item.extname,
                  filePath: filePath,  //拿上面存入的文件路径
                  success: function (res) {
                    console.log("成功打开文件")
                    // setTimeout(()=>{wx.hideLoading()},500)
                  },
                  fail(res){
                    console.log("失败打开文件",res)
                  }
                })
              }

            },
            fail(res){
              console.log("写文件失败",res)
            }
        })
      })

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

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

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

相关文章

  • java图片转二进制流_java将文件转化成二进制流

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

    2024年02月06日
    浏览(43)
  • 后端返回二进制流,前端处理二进制文件流,实现预览图片以及PDF

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

    2024年02月15日
    浏览(39)
  • Base64转二进制文件流以及转File、图片转Base64、二进制流转Base64

    1、Base64转二进制文件流 方法一: 调用示例: 方法二: 调用示例:  2、Base64转File 方法一: 调用示例: 方法二: 调用示例: 补充: 3、图片转Base64 调用示例: 4、二进制流转Base64 方法一: 调用示例: 方法二: 调用示例: 5、补充 5.1 atob() atob()  对经过 base-64 编码的字符

    2024年02月04日
    浏览(42)
  • Vue 读取后台二进制文件流转为图片显示

    Vue 读取后台二进制文件流转为图片显示 后台返回格式 axios写法 重点 responseType: ‘blob’ , 使用的是res中的data blob 本文章参考 https://huaweicloud.csdn.net/63a56170b878a545459459f2.html

    2024年04月11日
    浏览(27)
  • vue 后端返回二进制流-前端通过blob对象下载文件-图片

    前言 在实际开发中我们经常会遇见下载文件的场景,比如下载合同,下载文件 下载文件有2种方式,一种是后端返回二进制流,前端通过blob对象接受根据不同类型下载 还有一种把地址直接在浏览器新窗口打开浏览器打开pdf可以预览和下载,其他文件直接下载 但不管是那种方

    2024年02月05日
    浏览(55)
  • vue3+axios:图片链接转换成二进制文件流后并提交服务器

    1、使用Image类创建一个新的图片。 2、将图片转换成base64。 3、将base64图片使用File类转换成二进制文件流 4、将二进制文件流使用 FormData类转换成binary类型提交服务器。 Image类创建一个新的图片 图片转换成base64 base64转换成二进制文件流 二进制流文件提交到服务器

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

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

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

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

    2024年02月04日
    浏览(47)
  • 【前端】WebSocket接收二进制数据转JSON并解决中文乱码问题(ArrayBuffer转json)

    WebSocket与mqtt服务器通信,接收二进制数据并将其转为Json使用。一般方式都会出现中文乱码问题。

    2024年01月22日
    浏览(54)
  • html 二进制 blob 给图片赋值

    1、html 二进制流 (非base64),给图片赋值             var reader = new FileReader();             reader.onload = function (e) {               var img = document.querySelector(\\\'#canvas_img\\\');               img.src = e.target.result;             };             // data 二进流             reader.readAs

    2023年04月21日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包