nodejs如何讀取文件二進(jìn)制 前端響應(yīng)blob或base64顯示圖片
更新時(shí)間:2022年08月03日 14:08:18 作者:堅(jiān)持學(xué)習(xí)前端日記
這篇文章主要介紹了nodejs如何讀取文件二進(jìn)制 前端響應(yīng)blob或base64顯示圖片方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
讀取文件二進(jìn)制 前端響應(yīng)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) {
? ? ? // 可以更換不同文件 圖片 或者 文檔 等等 前端接受的時(shí)候 對應(yīng)就ok
? ? ? ? resolve(data)
? ? ? ? rejects(err)
? ? ? })
? ? })
? }
? let data = await ?read()
? res.send(data)
})
http.listen(3000, () => {
? console.log('listening on *:3000');
})前端響應(yīng)接受 使用了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 二進(jìn)制blob
? a.setAttribute('download','1.jpg') // 1.jpg 是動(dòng)態(tài)的 根據(jù)文件類型來取名
? 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
參數(shù):
- 第一個(gè)參數(shù):讀取文件的路徑
- 第二個(gè)參數(shù):highWaterMark 最高水位線,默認(rèn)最多讀取64K
讀取的內(nèi)容都是buffer類型
返回的結(jié)果是一個(gè)可讀流的實(shí)例,是非流動(dòng)模式–我們最后要轉(zhuǎn)化為流動(dòng)模式
let rs=fs.createReadStream('./1.txt',{highWaterMark:1})設(shè)置最高水位線每次讀取1k
let fs=require("fs");
// 第一個(gè)參數(shù),讀取文件的路徑
//第二個(gè)參數(shù) highWaterMark 最高水位線,默認(rèn)最多讀取64K
//讀取的類容都是buffer類型
//返回的結(jié)果是一個(gè)可讀流的實(shí)例,是非流動(dòng)模式---我們最后要轉(zhuǎn)為流動(dòng)模式
// 轉(zhuǎn)流動(dòng)模式需要on事件監(jiān)測
let rs=fs.createReadStream('./1.txt',{highWaterMark:1})
//在內(nèi)部不斷觸發(fā)rs.emit('data',數(shù)據(jù));data不能更改,留動(dòng)模式開啟后,數(shù)據(jù)會(huì)瘋狂觸發(fā)data事件
let arr=[];
rs.on('data',function (chunk) { //chunk是buffer類型
arr.push(chunk);
})
//監(jiān)聽文件讀取完畢,會(huì)自動(dòng)觸發(fā)一次end事件,沒有讀取完是不會(huì)觸發(fā)的
//Buffer.concat合并小buffer
rs.on('end',function (chunk) {
console.log( Buffer.concat(arr).toString());
})
// 監(jiān)聽錯(cuò)誤
rs.on('error',function (err) {
console.log(err);
})
// rs.resume() 恢復(fù)讀取
// rs.pause() 暫停讀取
//這兩個(gè)都控制是否繼續(xù)觸發(fā)data事件
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
完美解決node.js中使用https請求報(bào)CERT_UNTRUSTED的問題
下面小編就為大家?guī)硪黄昝澜鉀Qnode.js中使用https請求報(bào)CERT_UNTRUSTED的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
Windows7系統(tǒng)下如何安裝nodejs16以上版本
這篇文章主要給大家介紹了關(guān)于Windows7系統(tǒng)下如何安裝nodejs16以上版本的相關(guān)資料,很多時(shí)候node.js的版本存在兼容,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
node.js通過axios實(shí)現(xiàn)網(wǎng)絡(luò)請求的方法
下面小編就為大家分享一篇node.js通過axios實(shí)現(xiàn)網(wǎng)絡(luò)請求的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03

