对象存储服务-MinIO基本集成

这篇具有很好参考价值的文章主要介绍了对象存储服务-MinIO基本集成。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

是什么

MinIO 是一个高性能的分布式对象存储服务,适合存储非结构化数据,如图片,音频,视频,日志等。对象文件最大可以达到5TB。

安装启动

mkdir -p  /usr/local/minio
cd /usr/local/minio

# 下载安装包
wget https://dl.min.io/server/minio/release/linux-amd64/minio

下载完毕后:

在当前minio目录下,会出现一个minio文件

# 给予权限
chmod +x minio

# 创建minio文件存储目录及日志目录
mkdir -p /usr/local/minio/data
mkdir -p /usr/local/minio/logs

然后在 /usr/local/minio/目录下,新建一个run.sh并编辑以下内容

vim run.sh,然后将以下内容保存到run.sh,并为其赋予执行权限chmod u+x run.sh

run.sh内容如下:

#!/bin/bash
export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=minio123456
# nohup启动服务 指定文件存放路径 /root/data 还有设置日志文件路径 /root/minio/log
nohup ./minio server --address :9000 --console-address :9001 /usr/local/minio/data > /usr/local/minio/logs/minio.log 2>&1 &

启动minIO

# 启动minio服务
./run.sh
# 查看日志
tail -f /usr/local/minio/logs/minio.log 

平台使用

地址:http://127.0.0.1:9000(注意开放对应端口9000、9001)【当端口 9000 用于连接到 API 时,MinIO 会自动将浏览器访问重定向到 MinIO 控制台9001。】

输入账号密码后,

创建bucket,名字随意,创建完成后服务器/usr/local/minio/data下也会创建这个文件目录

对象存储服务-MinIO基本集成,cloud,分布式
对象存储服务-MinIO基本集成,cloud,分布式
http://www.dedeyun.com/it/java/102599.html

SpringBoot集成MinIO

1.添加依赖

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

2.配置文件

spring:
  minio:
    endpoint: http://124.222.253.33:9000
    access-key: minio
    secret-key: minio123456
    bucket-name: file
  servlet:
    multipart: # 上传文件最大大小
      max-file-size: 1024MB
      max-request-size: 1024MB

3.配置类创建客户端

@Data
@Component
@ConfigurationProperties(prefix = "spring.minio")
public class MinioConfig {

    private String endpoint;

    private String accessKey;

    private String secretKey;

    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey, secretKey)
                .build();
    }
}

4.核心业务类

仅有一些基础操作

@Slf4j
@Service
public class FileService {

    @Autowired
    private MinioClient minioClient;

    private static final String SEPARATOR = "/";

    @Value("${spring.minio.bucket-name}")
    private String bucketName;

    /**
     * 上传文件
     *
     * @param file 文件对象
     * @param id   设备ID
     */
    public void uploadFile(MultipartFile file, Long id) {
        try {
            // 创建bucket
            if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            }

            // 同名文件会进行覆盖
            String objectName = file.getOriginalFilename();

            @Cleanup
            InputStream inputStream = file.getInputStream();
            minioClient.putObject(
                    PutObjectArgs.builder()
                            .bucket(bucketName)
                            .object(id + SEPARATOR + objectName) // 多文件夹
                            .stream(inputStream, file.getSize(), -1)
                            .contentType(file.getContentType())
                            .build());

        } catch (Exception e) {
            log.error("文件上传失败!{}", e.getMessage());
            throw new RuntimeException("文件上传失败,请重新上传");
        }
    }

    /**
     * 删除文件
     *
     * @param path 文件路径
     */
    public void removeObject(String path) {
        try {
            minioClient.removeObject(RemoveObjectArgs.builder()
                    .bucket(bucketName)
                    .object(path)
                    .build());
        } catch (Exception e) {
            log.error("文件删除失败!{}", e.getMessage());
            throw new RuntimeException("文件删除失败,请重新删除");
        }
    }

    /**
     * 文件列表
     *
     * @param id 设备ID
     */
    public List<FileInfo> listFiles(Long id) {
        Iterable<Result<Item>> results = minioClient.listObjects(
                ListObjectsArgs.builder().bucket(bucketName).recursive(true).build());

        List<FileInfo> infos = new ArrayList<>();
        results.forEach(r -> {
            FileInfo info = new FileInfo();
            try {
                Item item = r.get();
                // 最多一层文件夹
                String path = item.objectName();
                int idx = path.indexOf(SEPARATOR);
                if (path.substring(0, idx).equals(id.toString())) {
                    info.setPath(path);
                    info.setFileName(path.substring(idx + 1));
                    info.setSize(item.size());
                    infos.add(info);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
        return infos;
    }

    /**
     * 下载文件
     *
     * @param response response
     * @param path     文件路径
     */
    public void downFile(HttpServletResponse response, String path) {
        try {
            @Cleanup
            OutputStream outputStream = response.getOutputStream();
            @Cleanup
            InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(this.bucketName)
                    .object(path).build());
            response.reset();
            String fileName = path.substring(path.indexOf(SEPARATOR) + 1);
            response.setHeader("Content-Disposition", "attachment;filename=" +
                    URLEncoder.encode(fileName.substring(fileName.lastIndexOf(SEPARATOR) + 1), "UTF-8"));
            response.setContentType("application/octet-stream");
            response.setCharacterEncoding("UTF-8");
            FileCopyUtils.copy(inputStream, outputStream);
        } catch (Throwable e) {
            log.error("文件下载失败!{}", e.getMessage());
            throw new RuntimeException("文件下载失败,请重新下载");
        }
    }
}

controller文章来源地址https://www.toymoban.com/news/detail-656335.html

@RestController
public class FileController {

    @Autowired
    private FileService fileService;

    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file, Long id) {
        fileService.uploadFile(file, id);
        return "上传成功";
    }

    @GetMapping("/download")
    public String downloadFile(HttpServletResponse response, String path) {
        fileService.downFile(response, path);
        return "下载成功";
    }

    @DeleteMapping("/delete")
    public String deleteFile(String path) {
        fileService.removeObject(path);
        return "删除成功";
    }

    @GetMapping("/list")
    public List<FileInfo> listFiles(Long id) {
        return fileService.listFiles(id);
    }
}

到了这里,关于对象存储服务-MinIO基本集成的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 部署 MinIO 分布式对象存储 & 配置为 typora 图床

    MinIO 是一款高性能的对象存储系统,它可以用于大规模的 AI/ML、数据湖和数据库工作负载。它的 API 与Amazon S3 云存储服务完全兼容,可以在任何云或本地基础设施上运行。MinIO 是 开源软件 ,也提供商业许可和支持 MinIO 的特点有: 简单 :MinIO 的安装和使用都非常简单,只需

    2024年02月07日
    浏览(59)
  • 学习笔记MinIo对象存储-Docker分布式集群搭建踩坑!

    ​ MinIO 是一款基于Go语言的高性能对象存储服务,在Github上已有39K+Star。它采用了Apache License v2.0开源协议,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 本文将使用 MinIO 来自建一个对象存储服务用于存储图片。 ​ M

    2024年02月11日
    浏览(53)
  • 云原生 | 从零开始,Minio 高性能分布式对象存储快速入手指南

    [ 点击 👉 关注「 全栈工程师修炼指南」公众号 ] 希望各位看友多多支持【关注、点赞、评论、收藏、投币】,助力每一个梦想。 【 WeiyiGeek Blog\\\'s - 花开堪折直须折,莫待无花空折枝  】 作者主页: 【 https://weiyigeek.top 】 博客地址: 【 https://blog.weiyigeek.top 】 作者答疑学习交

    2024年02月08日
    浏览(59)
  • 【Spring Cloud】新闻头条微服务项目:分布式文件系统MinIO实现文章页面存取

      个人简介:  📦个人主页:赵四司机 🏆学习方向:JAVA后端开发  📣种一棵树最好的时间是十年前,其次是现在! ⏰往期文章:SpringBoot项目整合微信支付 🧡喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。 前言: 最近在做一个基于SpringCloud+Springboot+Docker的新闻头

    2023年04月08日
    浏览(59)
  • 【分布式技术专题】「OSS中间件系列」Minio的文件服务的存储模型及整合Java客户端访问的实战指南

    Minio的元数据 数据存储 MinIO对象存储系统没有元数据数据库,所有的操作都是对象级别的粒度的,这种做法的优势是: 个别对象的失效,不会溢出为更大级别的系统失效。 便于实现\\\"强一致性\\\"这个特性。此特性对于机器学习与大数据处理非常重要。 数据管理 元数据与数据一起

    2024年02月11日
    浏览(59)
  • 【开发环境】(阿里云分布式文件系统)对象存储OSS 服务配置

    目录 一、开通 “对象存储 OSS” 服务: 二、创建 Bucket 容器: 1.创建一个Bucket: 三、使用 OSS 对象存储: 四、使用 SDK 访问 OSS: 1.安装使用 OSS SDK: 2.SDK 配置和测试:         进入阿里云官网: https://www.aliyun.com/ https://www.aliyun.com/         进入到 OSS 对象存储的管理平台

    2024年02月02日
    浏览(67)
  • minio分布式文件存储

    基本介绍 什么是  MinIO         MinIO 是一款基于 Go 语言的高性能、可扩展、云原生支持、操作简单、开源的分布式对象存储产品。基于 Apache License v2.0 开源协议,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口。可以很简单的和其他应用结合使用,例如

    2024年02月08日
    浏览(48)
  • 分布式文件存储MinIO-监控

    MinIO自身提供了关于集群状态和操作的相关的Prometheus SQL指标与支持Prometheus数据模型的监控指标收集工具进行搭配使用,无论是主机部署亦或是云上部署都可以进行集成。官方选定的第三方监控软件为Prometheus和InfluxDB,使用者可以根据各自公司对于监控设施的建设进行选择。

    2024年02月11日
    浏览(55)
  • Springboot整合minio组件-分布式文件存储

    一、快速开始 Minlo说明: Minio是Apcche旗下的一款开源的轻量级文件服务器,基于对象存储,协议是基于Apache License v2.0,开源可用于商务。 Minio主要用来存储非结构化的数据,类似文件,图片,照片,日志文件,各类备份文件等,按照官网描述,文件的大小从几KB到5TB。 Minio提

    2024年02月11日
    浏览(54)
  • OSS文件上传、MinIO分布式文件存储系统

    阿里云OSS上传图片 实现步骤: 1. 定义OSS相关配置 application-dev.yml application.yml 2. 读取OSS配置 在sky-common模块中,已定义 3. 生成OSS工具类对象 在sky-server模块 其中,AliOssUtil.java已在sky-common模块中定义 4. 定义文件上传接口 在sky-server模块中定义接口 MinIO分布式文件存储系统 MinI

    2024年01月24日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包