nodejs 实现文件流上传 及二进制流转换成base64编码

1、安装multer express 

npm i express multer

2、搭建本地服务器

const express = require('express')
const app = express()
const user = require('./interface/user')

app.use(express.json())
app.use(express.urlencoded({ extended: false }))
app.all('*', function (req, res, next) {
    // 设置请求头为允许跨域
    res.header('Access-Control-Allow-Origin', '*');
    // 设置服务器支持的所有头信息字段
    res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild, sessionToken');
    // 设置服务器支持的所有跨域请求的方法
    res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
    next();
  });

// 静态文件夹 
app.use('/upload',express.static(__dirname+'/upload'));

app.use('/system',user)

app.listen('1024',()=>{
    console.log('服务启动成功! http://127.0.0.1:1024');
})

3、新建 路由文件user.js

const express = require('express')
const multer = require('multer')
const fs = require('fs')
const path = require('path')
const { errorResponse, successResponse } = require('../until/response')
const router = express.Router()
let fileName = ''
const upload = multer({
    storage: multer.diskStorage({ 
        destination: function (req, file, cb) {
            // 上传文件得保存文件夹
            cb(null, './upload')
        },
        filename: function (req, file, cb) {
            // fieldname是表单的name值,也就是我们设定的“logo”,
            // originalname是文件上传时的名字,可以根据它获取后缀,
            // encoding,mimetype 我就不详细介绍了,可以自行输出查看。
            const { fieldname, originalname, encoding, mimetype } = file
            const after = originalname.split('.')[1] ? '.' + originalname.split('.')[1] : '.jpg'
            fileName = fieldname + after
            cb(null, fieldname + after);
        }
    })
})

router.post('/user/avatar', upload.single('flower'), (req, res) => {
    // 读取文件 转成二进制流
   fs.readFile(path.resolve(__dirname,"../upload/"+fileName),'binary',(err,data)=>{
    //将二进制流转成base64 编码
    let b64 = Buffer.from(data).toString('base64')
    let params = {
        ... req.file,
        base64:b64,
        // 前台访问得路径上传文件路径 一点要在第二步配置静态问价夹 否则访问不到
        imgUrl:'/upload/'+fileName
    }
    res.json(
        successResponse(200, '上传成功',params)
    )
   })
   
})

module.exports = router

4、最终效果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值