express如何使用minio上传图片?

5 篇文章 1 订阅
3 篇文章 0 订阅
  1. minio介绍

minio 是一款高性能、分布式的对象存储系统. 常用于储存项目中的图片,文件等。

  1. express中使用minio

  1. 下载minio

npm install minio --save
  1. 在需要的地方引入minio

const Minio = require('minio') //minio分布式储存
  1. 配置minio配置项

let minioClient = new Minio.Client({
  endPoint: 'XXX', // 本机内网ip 注意:不要携带http或https
  port: XXX,    //端口号默认为9000 如果有多个端口号需在服务器查看对应的端口
  useSSL: false, // false代表不需要https
  accessKey: 'XXX',  // 账号
  secretKey: 'XXX' // 密码
});
  1. minio常用api

let isExist = await minioClient.bucketExists('XXX'); //查询minio是否有XXX桶 此处可判断如果没有这个桶便新建一个桶
minioClient.fPutObject('XXX', fileName, filePath); // 上传文件到XXX桶 上传后访问链接为 http://本机内网ip:端口号/桶名/fileName
  1. express转换二进制文件为file文件

  1. 下载multiparty插件

npm install multiparty --save
  1. 引入multiparty

const multiparty = require("multiparty");
  1. 使用multiparty转换文件流

var form = new multiparty.Form()
form.parse(req,(err, fields, files)=>{ //此处的req为前端传过来的参数
    if(err){
      throw err
    }else{
      console.log(fields,files) // files中以键值对储存转换后的对象
      console.log(files.XXX[0]) //XXX为前端传的键名  files.XXX[0].originalFilename可以做为上方minioClient.fPutObject方法中的fileName,files.photoRef[0].path可以做为上方minioClient.fPutObject方法中的filePath
    }
})
  1. 最后附上完整代码

router.post("/uploadAvatar",(req,res,next)=>{
  var form = new multiparty.Form()
  form.parse(req,(err, fields, files)=>{
    if(err){
      throw err
    }else{
      console.log(fields,files)
        //XXX代表接口参数的键名
      uploadFile(files.xxx[0].originalFilename,files.xxx[0].path).then((res)=>{
        //注意此处是一个promise对象 需要用.then获取参数
        console.log("res",res)
        res.send("图片上传成功")
      })
    }
  })
  
})
async function uploadFile(fileName,filePath) {
  //基本配置
  let minioClient = new Minio.Client({
      endPoint: 'xxx.xx.xx.xxx', // 本机内网ip
      port: xxx,
      useSSL: false, // 不需要https
      accessKey: 'xx',  // 账号
      secretKey: 'xxxxx' // 密码
  });
  let isExist = await minioClient.bucketExists('xxx');
  let err = '';
  console.log('bucket is exist>>>',isExist);
  if(!isExist) {
      //创建桶后,需要在管理界面修改public访问权限,默认是private
      err = await minioClient.makeBucket('xxx', 'cn-north-1');
  }
  
  if(!err) {
      //上传文件
      await minioClient.fPutObject('xxx', fileName, filePath);
      console.log(fileName)
      console.log('返回给前端的文件路径>>>','http://主机名:端口/桶名/');

      return 'http://主机名:端口/桶名/' + fileName;
  }
}
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值