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

目录
  • 读取文件二进制 前端响应blob或base64显示图片
  • nodejs读取文件 createReadStream

读取文件二进制 前端响应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事件

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

(0)

相关推荐

  • Nodejs把接收图片base64格式保存为文件存储到服务器上

    下面一小段代码给大家分享Nodejs把接收图片base64格式保存为文件存储到服务器上的方法,具体代码如下所示: app.post('/upload', function(req, res){ //接收前台POST过来的base64 var imgData = req.body.imgData; //过滤data:URL var base64Data = imgData.replace(/^data:image\/\w+;base64,/, ""); var dataBuffer =

  • 使用Node.js实现base64和png文件相互转换的方法

    前天浏览技术博客,看到大厂面试题型中有使用nodejs实现base64和图片文件相互转换的例子,刚好近期要开发这个功能,暂时记录下来,下周开发完成再做一个补充. 1. 将base64 转换为图片文件,这里举例用的png文件 const fs = require('fs'); const path = 'xxx/'+ Date.now() +'.png'; const base64 = data.replace(/^data:image\/\w+;base64,/,""); //去掉图片

  • nodejs读取图片返回给浏览器显示

    本文主要是使用nodejs处理图片等资源返回给浏览器显示方法,但不只限制于图片,也可以是音频视频等其他非字符串文件的返回和显示.也可以扩展成nodejs静态资源服务器的开发方法. 请求头说明 在http响应里面有几个重要的东西,Content-Type 说明文件渲染MIME类型,这是我们本文的相关处理关键. 常用的MIME类型 { "css": "text/css", "gif": "image/gif", "htm

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

    目录 读取文件二进制 前端响应blob或base64显示图片 nodejs读取文件 createReadStream 读取文件二进制 前端响应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

  • java读取文件:char的ASCII码值=65279,显示是一个空字符的解决

    java读取文件遇到个很神奇的问题,String str1 = "1"; String str2 = "1"; str1 .equals(str1 ) 返回值是false.且他们的长度是不一样的. 这是个用眼睛看不见的问题,因为有个空字符.这里要去掉他 补充知识:ArrayList.addAll(),clone()都是浅克隆,改变一个集合,另一个会跟着改变 ArrayList.addAll(),clone()都是浅克隆. (浅克隆:当改变克隆对象的引用类型的值(注意

  • django之静态文件 django 2.0 在网页中显示图片的例子

    小白,有错的地方,希望大家指正~ 使用的是django2.0 python3.6 1.首先,要在settings.py中设置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR,'media/') 2.url.py中,在加入 from django.conf.urls.static import static from . import settings urlpatterns = [ path('admin/', admin.sit

  • JAVA中读取文件(二进制,字符)内容的几种方法总结

    JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代码,需要的可以直接复制使用 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileName); In

  • Java IO读取文件的实例详解

    Java中文件流的两个主要方式就是字符流和字节流,如下图: 具体的使用方法可以参考官方文档,这里主要介绍四种常见的文件读取方式 1.通过字节来读取文件(常用于二进制文件:图片.声音.视频等) 2.通过字符来读取文件(常用于文本的读取) 3.通过行来读取文件(常用于面向行的格式化文本读取) 4.随机读取文件(基于字节来读取) 下面是对于这四种读取方式的代码,如下: package com.ds.io; //1.按字节读取文件内容 //2.按字符读取文件内容 //3.按行读取文件内容 //4.随机读

  • Java读取文件方法汇总

    本文实例为大家分享了Java读取文件的方法,供大家参考,具体内容如下 1.按字节读取文件内容 2.按字符读取文件内容 3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream

  • java 读取文件方法的总结

    java 读取文件方法的总结 1.按字节读取 文件 内容 2.按字符读取 文件 内容 3.按行读取 文件 内容 4.随机读取 文件 内容 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null;

  • java读取文件和写入文件的方式(简单实例)

    Java代码 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fileName) { File file = new File(fileName); InputStream in = null; try { System.out.println("以字节为单位读取文件内容,一次读一个字节:"); // 一次读

  • Java中读取文件转换为字符串的方法

    方式一 /** 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. 当然也是可以读字符串的. */ /* 貌似是说网络环境中比较复杂,每次传过来的字符是定长的,用这种方式?*/ public String readString1() { try { //FileInputStream 用于读取诸如图像数据之类的原始字节流.要读取字符流,请考虑使用 FileReader. FileInputStream inStream=this.openFileInput(FILE_NAME)

  • 前端axios下载excel文件(二进制)的处理方法

    需求:通过后端接口下载excel文件,后端没有文件地址,返回二进制流文件 实现:axios(ajax类似) 主要代码: axios:设置返回数据格式为blob或者arraybuffer 如: var instance = axios.creat({ ... //一些配置 responseType: 'blob', //返回数据的格式,可选值为arraybuffer,blob,document,json,text,stream,默认值为json }) 请求时的处理: getExcel().then

随机推荐