您好,登錄后才能下訂單哦!
本篇內容介紹了“nodejs怎么讀取文件二進制前端響應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() })
參數:
第一個參數:讀取文件的路徑
第二個參數: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事件
“nodejs怎么讀取文件二進制前端響應blob或base64顯示圖片”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。