将base64编码转换成图片
- 有时候会遇到要把前端发送过来的图片的文件base64编码转化成图片,我看过了大部分的文章,他们都是使用new Buffer来实现转化的,但是你要知道,new Buffer已经被废弃了,下面是我的方法:
先获取图片的base64编码
- 可以使用FileReader,像这样:
<!-- test.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>获取图片的base64编码</title>
</head>
<body>
<input type="file" name="file" id="inputBox">
<script src="./test.js"></script>
</body>
</html>
// test.js
var inputBox = document.getElementById("inputBox")
inputBox.onchange = function(){
var reader = new FileReader()
reader.readAsDataURL(this.files[0])
reader.onload = function(){
console.log(reader.result)
}
}
- 选择文件之后
- 控制台输出的结果如下:
- 可以看见已经成功把图片转化成了base64编码,同时可以看到前缀是data:image/png;base64,也就是说,这张图片是png格式的,事实上,真正的base64编码是前缀之后的那些数据。
拿到图片的base64编码之后,就可以将他转化成图片了
- 具体方式是这样的:
// test.js
var inputBox = document.getElementById("inputBox")
inputBox.onchange = function(){
var reader = new FileReader()
reader.readAsDataURL(this.files[0])
reader.onload = function(){
// 将 “data:image\/png;base64,”前缀去除掉,然后将图片的base64编码通过 post请求发送给服务器
var data = reader.result.replace(/^data:image\/png;base64,/g,"")
$.post("http://localhost:3000/index",""+data).then(function(data){
console.log(data)
})
}
}
// server.js
const http = require("http")
const fs = require("fs")
const server = http.createServer(function(req,res){
res.setHeader("Access-Control-Allow-Origin","null")
if(req.url === "/index"){
// 服务器接收图片数据的过程
var data = []
req.on("error",function(err){
if(err) console.log(err)
}).on("data",function(chunk){
data.push(chunk)
}).on("end",function(){
data = Buffer.concat(data).toString()
var base64 = Buffer.from(data,"base64")
// 将接收到的图片base64编码转换成 demo.png
fs.writeFile("demo.png",base64,function(){
console.log("\033[34mdemo.png has been converted to complete!\033[39m")
})
})
res.end("the index have received the base64 code..")
}
})
server.listen(3000,function(){
console.log("server is running at http://localhost:3000")
})
- 看看结果:
- 客户端成功接收到响应
- 服务器成功把base64转化成图片 demo.png
demo.png
已经转化成了图片了
大功告成
我写过一个服务器框架sofer,通过sofer搭建的服务器可以更快更方便处理媒体文件的信息,毕竟我已经这些功能封装成一个模块,下一篇会讲怎么使用sofer处理媒体文件
- sofer源代码:
https://github.com/shataniya/sofer