读取文件二进制 前端响应blob或base64显示图片

express 框架 nodejs

var express = require('express')
var app = express();
var fs = require('fs')
var http = require('http').createServer(app);
app.get('/send',async (req, res) => {
  res.setHeader('Access-Control-Allow-Origin','*');
  function read () {
    return new Promise((resolve, rejects) => {
      fs.readFile('./public/2020.jpg',function(err, data) {
        resolve(data)
        rejects(err)
      })
    })
  }
  let data = await  read()
  res.send(data)
})
http.listen(3000, () => {
  console.log('listening on *:3000');
});app.get('/send',async (req, res) => {
  res.setHeader('Access-Control-Allow-Origin','*');
  function read () {
    return new Promise((resolve, rejects) => {
      fs.readFile('./public/2020.jpg',function(err, data) {
      // 可以更换不同文件 图片 或者 文档 等等 前端接受的时候 对应就ok
        resolve(data)
        rejects(err)
      })
    })
  }
  let data = await  read()
  res.send(data)
})
http.listen(3000, () => {
  console.log('listening on *:3000');
})

前端响应接受 使用了vue脚手架

<template>
  <div id="app">
    <img :src="src" alt="12">
  </div>
</template>
<script>
export default {
  data () {
    return {
      src: ''
    }
  },
  created () {
    function blobToDataURI (blob) {
          return new Promise((resolve, reject) => {
          let reader = new FileReader()
          reader.readAsDataURL(blob)//blob
          reader.onload = function (e) {
          resolve(e.target.result)//base64
      }
  })
  }
fetch('http://localhost:3000/send').then(x=>x.blob())
.then(async res=>{
  var body = document.body
 await blobToDataURI(res).then(reu => {
    this.src = reu // base64显示图片
  })
  //this.src = URL.createObjectURL(res) blob流显示图片
  console.log(URL.createObjectURL(res))
  var a = document.createElement('a')
  a.setAttribute('href', URL.createObjectURL(res))
  body.appendChild(a)
  //Blob {size: 50107, type: "application/octet-stream"}
  res 二进制blob
  a.setAttribute('download','1.jpg') // 1.jpg 是动态的 根据文件类型来取名
  a.click()
})
  }
}
</script>

精简版

function base (blob) {
      var read = new FileReader()
      read.readAsDataURL(blob)
      read.onload = function (x) {
        console.log(x.target.result)
        var body = document.body
      var a = document.createElement('a')
      a.setAttribute('download', '1.pdf')
      a.setAttribute('href', x.target.result)
      body.appendChild(a)
      a.click()
      }
    }
    fetch('http://localhost:3000/send').then(x => x.blob()).then(x => {
      console.log(x)
      var body = document.body
      var a = document.createElement('a')
      // var url = window.URL.createObjectURL(new Blob([x]))
      base(new Blob([x]))
      // a.setAttribute('download', '1.pdf')
      // a.setAttribute('href', url)
      // body.appendChild(a)
      // a.click()
    })

nodejs读取文件 createReadStream

参数:

  • 第一个参数:读取文件的路径
  • 第二个参数:highWaterMark 最高水位线,默认最多读取64K

读取的内容都是buffer类型

返回的结果是一个可读流的实例,是非流动模式–我们最后要转化为流动模式

let rs=fs.createReadStream('./1.txt',{highWaterMark:1})

设置最高水位线每次读取1k

let fs=require("fs");
// 第一个参数,读取文件的路径
//第二个参数 highWaterMark 最高水位线,默认最多读取64K
//读取的类容都是buffer类型
//返回的结果是一个可读流的实例,是非流动模式---我们最后要转为流动模式
// 转流动模式需要on事件监测
let rs=fs.createReadStream('./1.txt',{highWaterMark:1})
//在内部不断触发rs.emit('data',数据);data不能更改,留动模式开启后,数据会疯狂触发data事件
let arr=[];
rs.on('data',function (chunk) {  //chunk是buffer类型
    arr.push(chunk);
})
//监听文件读取完毕,会自动触发一次end事件,没有读取完是不会触发的
//Buffer.concat合并小buffer
rs.on('end',function (chunk) {
    
    console.log( Buffer.concat(arr).toString());
})
// 监听错误
rs.on('error',function (err) {
    console.log(err);
})
// rs.resume() 恢复读取
// rs.pause()  暂停读取
//这两个都控制是否继续触发data事件

以上为个人经验,希望能给大家一个参考,也希望大家多多支持Devmax。 

nodejs如何读取文件二进制 前端响应blob或base64显示图片的更多相关文章

  1. 使用canvas压缩图片大小的方法示例

    这篇文章主要介绍了使用canvas压缩图片大小的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. 手对手的教你用canvas画一个简单的海报的方法示例

    企业的广告投入开始从电视等传统媒体向基于圈层文化的新媒体精准营销转移,很多人都想制作一张属于自己的海报,本文介绍了手对手的教你用canvas画一个简单的海报的方法示例,感兴趣的可以了解一下

  3. 浅谈移动端网页图片预加载方案

    这篇文章主要介绍了浅谈移动端网页图片预加载方案 的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. 浅析HTML5中的download属性使用

    这篇文章主要介绍了浅析HTML5中的download属性使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. html5 canvas合成海报所遇问题及解决方案总结

    这篇文章主要介绍了html5 canvas合成海报所遇问题及解决方案总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  6. 使用html2canvas实现将html内容写入到canvas中生成图片

    这篇文章主要介绍了使用html2canvas实现将html内容写入到canvas中生成图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  7. Canvas与图片压缩的示例代码

    本篇文章主要介绍了Canvas与图片压缩的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. HTML5 Blob 实现文件下载功能的示例代码

    这篇文章主要介绍了HTML5 Blob 实现文件下载功能的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  9. web字体加载方案优化小结

    这篇文章主要介绍了web字体加载方案优化小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  10. ios – 伞框架

    错误.应用程序,通常位于…错误仍然存在你也可以在这里添加(子)框架的路径.

随机推荐

  1. Error: Cannot find module ‘node:util‘问题解决

    控制台 安装 Vue-Cli 最后一步出现 Error: Cannot find module 'node:util' 问题解决方案1.问题C:\Windows\System32>cnpm install -g @vue/cli@4.0.3internal/modules/cjs/loader.js:638 throw err; &nbs

  2. yarn的安装和使用(全网最详细)

    一、yarn的简介:Yarn是facebook发布的一款取代npm的包管理工具。二、yarn的特点:速度超快。Yarn 缓存了每个下载过的包,所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率,因此安装速度更快。超级安全。在执行代码之前,Yarn 会通过算法校验每个安装包的完整性。超级可靠。使用详细、简洁的锁文件格式和明确的安装算法,Yarn 能够保证在不同系统上无差异的工作。三、y

  3. 前端环境 本机可切换node多版本 问题源头是node使用的高版本

    前言投降投降 重头再来 重装环境 也就分分钟的事 偏要折腾 这下好了1天了 还没折腾出来问题的源头是node 使用的高版本 方案那就用 本机可切换多版本最终问题是因为nodejs的版本太高,导致的node-sass不兼容问题,我的node是v16.14.0的版本,项目中用了"node-sass": "^4.7.2"版本,无法匹配当前的node版本根据文章的提

  4. nodejs模块学习之connect解析

    这篇文章主要介绍了nodejs模块学习之connect解析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  5. nodejs npm package.json中文文档

    这篇文章主要介绍了nodejs npm package.json中文文档,本文档中描述的很多行为都受npm-config(7)的影响,需要的朋友可以参考下

  6. 详解koa2学习中使用 async 、await、promise解决异步的问题

    这篇文章主要介绍了详解koa2学习中使用 async 、await、promise解决异步的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. Node.js编写爬虫的基本思路及抓取百度图片的实例分享

    这篇文章主要介绍了Node.js编写爬虫的基本思路及抓取百度图片的实例分享,其中作者提到了需要特别注意GBK转码的转码问题,需要的朋友可以参考下

  8. CentOS 8.2服务器上安装最新版Node.js的方法

    这篇文章主要介绍了CentOS 8.2服务器上安装最新版Node.js的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  9. node.js三个步骤实现一个服务器及Express包使用

    这篇文章主要介绍了node.js三个步骤实现一个服务器及Express包使用,文章通过新建一个文件展开全文内容,具有一定的参考价值,需要的小伙伴可以参考一下

  10. node下使用UglifyJS压缩合并JS文件的方法

    下面小编就为大家分享一篇node下使用UglifyJS压缩合并JS文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

返回
顶部