当前位置: 首页 > article >正文

使用minio高性能存储图片

在服务器中安装minio

使用docker在服务器中安装minio,命令如下docker pull minio/minio

创建minio的存储文件mkdir -p ~/minio/data

创建容器并运行

docker run    -p 9001:9000    -p 9090:9090    --name minio    -v ~/minio/data:/data    -e "MINIO_ROOT_USER=admin"    -e "MINIO_ROOT_PASSWORD=admin123456"    -d    quay.io/minio/minio server /data --console-address ":9090"

登录账号为admin,密码为admin123456

使用element-plus插入上传图片的代码

<template>
  <el-upload
    class="avatar-uploader"
    action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
    :show-file-list="false"
    :on-success="handleAvatarSuccess"
    :before-upload="beforeAvatarUpload"
    :headers="headers"
  >
    <img v-if="imageUrl" :src="imageUrl" class="avatar" />
    <el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
  </el-upload>
</template>

注意:action路径要改为自己的后端接口,还需要加上请求头属性

import { useApp } from '@/pinia/modules/app'
const headers=ref({
token:useApp().authorization.token
})

后端实现接口

引入依赖

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.5.2</version>
</dependency>

controller

public class FileUploadController {
    @Autowired
    FileUploadService fileUploadService;
    @PostMapping("fileUpload")
    public Result fileUpload(@RequestParam(value = "file")MultipartFile multipartFile){
        String fileUrl=fileUploadService.fileUpload(multipartFile);
        return Result.ok(fileUrl);
    }
}

Service

@Service
public class FileUploadServiceImpl implements FileUploadService {
    @Autowired
    MinioProperties minioProperties;
    @SneakyThrows
    @Override
    public String fileUpload(MultipartFile multipartFile) {
        //客户端
        MinioClient minioClient= MinioClient.builder()
                .endpoint(minioProperties.getEndpointUrl())
                .credentials(minioProperties.getAccessKey(), minioProperties.getSecreKey())
                .build();
        //判断桶是否存在,如果不存在就创建
       boolean found= minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProperties.getBucketName()).build());
       if (!found){//桶不存在,则创建
           minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProperties.getBucketName()).build());
       }else {
           System.out.println("minio桶存在");
       }

        //设置存储对象
        String extFileName= FileNameUtils.getExtension(multipartFile.getOriginalFilename());
       String fileName=new SimpleDateFormat("yyyy/MM/dd/")
               .format(new Date())+ UUID.randomUUID().toString().replace("-","")+"."+extFileName;
        //参数
        PutObjectArgs putObjectArgs= PutObjectArgs.builder()
                .bucket(minioProperties.getBucketName())
                .stream(multipartFile.getInputStream(), multipartFile.getSize(), -1)
                .object("avatar/"+fileName)
                .build();
       //上传
        minioClient.putObject(putObjectArgs);
        return minioProperties.getEndpointUrl()+"/"+minioProperties.getBucketName()+"/"+"avatar/"+fileName;
    }


}

在这里使用了配置文件当中的参数,MinioProperties 读取配置文件当中的参数

@Data
@ConfigurationProperties(prefix = "spzx.minio")
@Component// 前缀不能使用驼峰命名
public class MinioProperties {
    private String endpointUrl;
    private String accessKey;
    private String secreKey;
    private String bucketName;
}
 #minio参数
spzx:
   minio:
    endpointUrl: http://192.168.159.30:9001
    accessKey: admin
    secreKey: admin123456
    bucketName: spzx

前端实现上传成功后的回显

//处理上传头像成功
function handleAvatarSuccess(response,file){
    sysUser.value.avatar=response.data
    //alert(sysUser.value.avatar)
}


http://www.kler.cn/a/512645.html

相关文章:

  • 【Python】循环语句
  • 蓝桥杯小白备考指南
  • 深入理解GPT底层原理--从n-gram到RNN到LSTM/GRU到Transformer/GPT的进化
  • Vscode:问题解决办法 及 Tips 总结
  • QT开发-T113 Linux 主板QC配置套件
  • Centos 8 交换空间管理
  • 电子应用设计方案91:智能AI花洒系统设计
  • C# 常用的文件处理方法
  • 【STM32-学习笔记-12-】PWR电源控制
  • 数据结构(精讲)----绪论
  • C# 委托(Delegate)的使用方法及使用场景
  • MySQL可直接使用的查询表的列信息
  • Nginx:从入门到实战使用教程
  • 如何在Mac上优雅的使用nvm管理Node.js
  • 【 MySQL 学习2】常用命令
  • Chrome远程桌面无法连接怎么解决?
  • Vue.js组件开发-解决PDF签章预览问题
  • Python基础学习(五)文件和异常
  • AI之HardWare:英伟达NvidiaGPU性价比排名(消费级/专业级/中高端企业级)以及据传英伟达Nvidia2025年将推出RTX 5090/5080、华为2025年推出910C/910D
  • Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅
  • Docker 之mysql从头开始——Docker下mysql安装、启动、配置、进入容器执行(查询)sql
  • 深度学习基础:自动梯度、线性回归与逻辑回归的 PyTorch 实践
  • 【GORM】初探gorm模型,字段标签与go案例
  • 手写 拖拽 修改参数
  • HDFS的Java API操作
  • 探索国产多相流仿真技术应用,积鼎科技助力石油化工工程数字化交付