iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >对象存储MinIO(实现文件上传、读取、下载、删除)
  • 296
分享到

对象存储MinIO(实现文件上传、读取、下载、删除)

springbootjavamysql 2023-08-31 21:08:33 296人浏览 安东尼
摘要

一、 MiNIO         Minio 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服 务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/ 虚拟机镜

一、 MiNIO

        Minio 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服

务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/

虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

        MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 nodejs, Redis 或者

Mysql

二、 MinIO安装和启动

       由于MinIO是一个单独的服务器,需要单独部署,有关MinIO在windows系统上的使用请查看

以下博客。

window10安装minio_angelasp的博客-CSDN博客_win10 安装minio

三、 pom.xml(Maven依赖文件)

       org.springframework.boot       spring-boot-starter-WEB       io.minio       minio       8.3.4

 四、 applicatin.properties(配置文件)

# 设置单个文件大小spring.servlet.multipart.max-file-size= 50MB#minio文件服务器配置s3.url=Http://localhost:9000s3.accessKey=admins3.secreTKEy=admin123s3.bucketName=test

五、 编写Java业务类

minio涉及到的方法有:判断存储桶是否存在,创建存储桶,上传文件,读取文件、下载文件,删

除文件等操作

StorageProperty 存储属性类:

import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;  @Data@Component@ConfigurationProperties(prefix = "s3")public class StorageProperty {    private String url;    private String accessKey;    private String secretKey;//    private long callTimeOut = 60000;//    private long readTimeOut = 300000;}

minio配置类: 

import io.minio.BucketExistsArgs;import io.minio.Minioclient;import io.minio.messages.Bucket;import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.stereotype.Component; import javax.annotation.PostConstruct;import java.util.List; @Slf4j@Component@Configurationpublic class MinioClientConfig {     @Autowired    private StorageProperty storageProperty;     private static MinioClient minioClient;          public static MinioClient getMinioClient(){        return minioClient;    }         @SneakyThrows(Exception.class)    public static boolean bucketExists(String bucketName) {        return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());    }          @SneakyThrows(Exception.class)    public static List getAllBuckets() {        return minioClient.listBuckets();    }         @PostConstruct    public void init() {        try {            minioClient = MinioClient.builder()                    .endpoint(storageProperty.getUrl())                    .credentials(storageProperty.getAccessKey(), storageProperty.getSecretKey())                    .build();        } catch (Exception e) {            e.printStackTrace();            log.error("初始化minio配置异常: 【{}】", e.fillInStackTrace());        }    } }

minio工具类 

import io.minio.*; import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream;import javax.servlet.http.httpservletResponse;import java.io.InputStream;import java.nio.charset.StandardCharsets;import java.util.Map; @Slf4j@Componentpublic class MinioUtil {            public ResultEntity> minioUpload(MultipartFile file, String fileName, String bucketName) {        ResultEntity> resultEntity = new ResultEntity();        try {            MinioClient minioClient = MinioClientConfig.getMinioClient();            // fileName为空,说明要使用源文件名上传            if (fileName == null) {                fileName = file.getOriginalFilename();                fileName = fileName.replaceAll(" ", "_");            }            InputStream inputStream = file.getInputStream();            PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(bucketName).object(fileName)                    .stream(inputStream, file.getSize(), -1).contentType(file.getContentType()).build();            //文件名称相同会覆盖            minioClient.putObject(objectArgs);            return resultEntity;        } catch (Exception e) {            e.printStackTrace();            return null;        }    }          public boolean bucketExists(String bucketName) {        boolean flag = false;        try {            flag = MinioClientConfig.bucketExists(bucketName);            if (flag) {                return true;            }        } catch (Exception e) {            e.printStackTrace();            return false;        }        return false;    }         public InputStream getFileInputStream(String fileName, String bucketName) {        try {            MinioClient minioClient = MinioClientConfig.getMinioClient();            return minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());        } catch (Exception e) {            e.printStackTrace();            log.error(e.getMessage());        }        return null;    }          public void createBucketName(String bucketName) {        try {            if (StringUtils.isBlank(bucketName)) {                return;            }            MinioClient minioClient = MinioClientConfig.getMinioClient();            boolean isExist = MinioClientConfig.bucketExists(bucketName);            if (isExist) {                log.info("Bucket {} already exists.", bucketName);            } else {                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());            }        } catch (Exception e) {            e.printStackTrace();            log.error(e.getMessage());        }    }        public InputStream downloadFile(String bucketName, String originalName, HttpServletResponse response) {        try {            MinioClient minioClient = MinioClientConfig.getMinioClient();            InputStream file = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(originalName).build());            String filename = new String(originalName.getBytes("ISO8859-1"), StandardCharsets.UTF_8);            if (StringUtils.isNotBlank(originalName)) {                filename = originalName;            }            response.setHeader("Content-Disposition", "attachment;filename=" + filename);            ServletOutputStream servletOutputStream = response.getOutputStream();            int len;            byte[] buffer = new byte[1024];            while ((len = file.read(buffer)) > 0) {                servletOutputStream.write(buffer, 0, len);            }            servletOutputStream.flush();            file.close();            servletOutputStream.close();            return file;        } catch (Exception e) {            e.printStackTrace();            return null;        }    }         public void deleteBucketName(String bucketName) {        try {            if (StringUtils.isBlank(bucketName)) {                return;            }            MinioClient minioClient = MinioClientConfig.getMinioClient();            boolean isExist = MinioClientConfig.bucketExists(bucketName);            if (isExist) {                minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());            }        } catch (Exception e) {            e.printStackTrace();            log.error(e.getMessage());        }    }        public void deleteBucketFile(String bucketName) {        try {            if (StringUtils.isBlank(bucketName)) {                return;            }            MinioClient minioClient = MinioClientConfig.getMinioClient();            boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());            if (isExist) {                minioClient.deleteBucketEncryption(DeleteBucketEncryptionArgs.builder().bucket(bucketName).build());            }        } catch (Exception e) {            e.printStackTrace();            log.error(e.getMessage());        }    }         public String getPreviewFileUrl(String bucketName, String fileName) {        try {            MinioClient minioClient = MinioClientConfig.getMinioClient();            return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(fileName).build());        } catch (Exception e) {            e.printStackTrace();            return "";        }    }}

 六、 MinIoController

文件上传、文件读取、文件下载、文件删除接口如下:

@RestController@RequestMapping("/minio")public class MinIoController extends BaseController {     MinioUtil minioUtil = new MinioUtil();         @PostMapping("/uploadFile")    public ajaxResult uploadFile(@RequestBody MultipartFile file) {        MinioClient minioClient = MinioClientConfig.getMinioClient();        if (minioClient == null) {            return AjaxResult.error("连接MinIO服务器失败", null);        }        ResultEntity> result = minioUtil.minioUpload(file, "", "data-enpower");        if (result.getCode() == 0) {            return AjaxResult.success("上传成功");        } else {            return AjaxResult.error("上传错误!!!");        }    }         @RequestMapping("/getRedFile")    public AjaxResult getRedFile(@RequestBody String fileName) {        MinioClient minioClient = MinioClientConfig.getMinioClient();        if (minioClient == null) {            return AjaxResult.error("连接MinIO服务器失败", null);        }        String url = minioUtil.getPreviewFileUrl("data-enpower",fileName);        return AjaxResult.success(url);    }         @RequestMapping("/downloadFile")    public String downloadFile(@RequestParam String fileName, HttpServletResponse response) {        MinioClient minioClient = MinioClientConfig.getMinioClient();        if (minioClient == null) {            return "连接MinIO服务器失败";        }        return minioUtil.downloadFile("data-enpower",fileName,response) != null ? "下载成功" : "下载失败";    }         @PostMapping("/deleteFile")    public String deleteFile(String fileName) {        MinioClient minioClient = MinioClientConfig.getMinioClient();        if (minioClient == null) {            return "连接MinIO服务器失败";        }        boolean flag = minioUtil.deleteFile("data-enpower",fileName);        return flag == true ? "删除成功" : "删除失败";    }  }

对象存储MinIO基本用法

对象存储服务MinIO的基本用法 

https://www.cnblogs.com/hackyle/p/minio-demo.html

 

来源地址:https://blog.csdn.net/ZHOU_VIP/article/details/129195318

您可能感兴趣的文档:

--结束END--

本文标题: 对象存储MinIO(实现文件上传、读取、下载、删除)

本文链接: https://www.lsjlt.com/news/387036.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 对象存储MinIO(实现文件上传、读取、下载、删除)
    一、 MinIO         MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服 务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/ 虚拟机镜...
    99+
    2023-08-31
    spring boot java mysql
  • MinIO实现文件上传存储
    MinIO 目录MinIO概念MinIO下载安装启动下载安装启动 MinIO实现上传文件导入maven坐标在application文件添加配置实现代码 目录 MinIO概念...
    99+
    2023-09-02
    java
  • PHP(文件上传、下载、删除、读取&写入)
    一、文件上传: 先构造一个html的上传页面 文件上传 action:是提交给谁处理,写upload.php的话就交由upload.php处理,为空就是自己处理  可以看到页面成功构造成...
    99+
    2023-09-04
    安全 php
  • Java实现minio上传、下载、删除文件,支持https访问
    MinIO 是一款高性能、分布式的对象存储系统,Minio是基于Go语言编写的对象存储服务,适合于存储大容量非结构化的数据,例如图片、音频、视频、备份数据等,传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色。 一、配置 导入...
    99+
    2023-09-03
    java spring https Powered by 金山文档
  • docker怎么安装minio及实现文件上传、删除、下载
    这篇文章主要介绍“docker怎么安装minio及实现文件上传、删除、下载”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“docker怎么安装minio及实现文件上传、删除、下载”文章能帮助大家解决问...
    99+
    2023-07-05
  • SpringBoot整合MongoDB实现文件上传下载删除
    目录本文主要内容 1. 基础命令 2. GridFsTemplate使用 2.1引入pom依赖2.2 配置yml2.3 上传下载删除 本文主要内容 MongoDB基础操作...
    99+
    2024-04-02
  • 【Java编程系列】Minio实现文件上传下载
    热门系列: 【Java编程系列】Amazon S3实现文件上传下载 目录 热门系列: 1、前言 2、Minio实战代码 2.1 Minio环境部署 2.2 Minio的Sdk对接实现 2.2.1 Minio Maven依赖 2.2.2 m...
    99+
    2023-09-02
    minio minio上传下载 minio存储 minio预览 minio永久访问
  • Blob对象实现文件上传下载示例详解
    目录什么是Blod?Blob的属性与方法使用Blod下载指定类型文件上传FileReader对象的异步方式读取首先先介绍一下 FileReader对象FileReader常用属性与方...
    99+
    2023-01-04
    Blob对象实现文件上传下载 Blob文件上传下载
  • Blob对象如何实现文件上传下载功能
    本篇内容介绍了“Blob对象如何实现文件上传下载功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是Blod?Blob 对象表示一个不可...
    99+
    2023-07-04
  • javascriptBlob对象实现文件下载
    目录说明一、Blob对象二、前端三、后端总结说明 最近遇到一个需求,文件下载,但需要鉴权,这就意味着不能用后台返回下载链接的方式进行下载,因为一旦被别人拿到这条链接,就可以不需要任何...
    99+
    2024-04-02
  • SpringMVC实现上传下载文件
    本文实例为大家分享了SpringMVC实现上传下载文件的具体代码,供大家参考,具体内容如下 一、SpringMVC专门提供了CommonsMultipartResolver组件用于文...
    99+
    2024-04-02
  • SpringBoot整合阿里云OSS对象存储服务实现文件上传
    目录1. 准备工作: 2. 配置: 3. 详细代码: 4. 测试: 1. 准备工作: 一、首先登录阿里云OSS对象存储控制台创建一个Bucket作为你的存储空间。 二、创建Acce...
    99+
    2024-04-02
  • SpringMVC实现文件上传与下载
    本文实例为大家分享了SpringMVC实现文件上传与下载的具体代码,供大家参考,具体内容如下 0.环境准备 1.maven依赖 <dependencies> ...
    99+
    2024-04-02
  • vue实现文件上传和下载
    本文实例为大家分享了vue实现文件上传和下载的具体代码,供大家参考,具体内容如下 文件上传 vue中的文件上传主要分为两步:前台获取到文件和提交到后台 获取文件 前台获取文件,主要是...
    99+
    2024-04-02
  • Go实现文件上传和下载
    本文实例为大家分享了Go实现文件上传和下载的具体代码,供大家参考,具体内容如下 一.文件上传 文件上传:客户端把上传文件转换为二进制流后发送给服务器,服务器对二进制流进行解析 HTM...
    99+
    2024-04-02
  • Java实现HDFS文件上传下载
    本文实例为大家分享了利用Java实现HDFS文件上传下载的具体代码,供大家参考,具体内容如下 1、pom.xml配置 <!--配置--> <properties&g...
    99+
    2024-04-02
  • springMVC实现文件上传和下载
    本文实例为大家分享了springMVC实现文件上传和下载的具体代码,供大家参考,具体内容如下 1准备工作 web.xml文件导入DispatcherServlet,Character...
    99+
    2024-04-02
  • ASP.NETCore实现文件上传和下载
    本文实例为大家分享了ASP.NET Core实现文件上传和下载的具体代码,供大家参考,具体内容如下 一、文件上传 1.1 获取文件后缀 /// <summary> ///...
    99+
    2024-04-02
  • java实现文件上传和下载
    本文实例为大家分享了java实现文件上传和下载的具体代码,供大家参考,具体内容如下 文件的上传 upload:文件上传 客户端通过表单的文件域file  把客户端的文件 上...
    99+
    2024-04-02
  • Servlet实现文件的上传与下载
    前言: 文件的上传和下载在日常开发中很是常见,那么这一功能是如何实现的呢,下面我给大家介绍一下 实现条件: 1、需要一个form标签,method为post请求 2、form的enc...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作