将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

Logo

基于 Vue 的企业级 UI 组件库和中后台系统解决方案,为数万开发者服务。

更多推荐