SpringBoot上传文件到Minio服务器,支持批量上传

这篇具有很好参考价值的文章主要介绍了SpringBoot上传文件到Minio服务器,支持批量上传。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文主要介绍如何使用SpringBoot上传到minio服务器。

没什么可多说的,公司用什么咱们开发研究什么就完事了。直接分享核心代码。

单个文件上传

minio依赖

  <!--  minio依赖   -->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.2.1</version>
        </dependency>

配置文件

首先是核心的参数,包括服务器minio地址,以及用户名密码,使用的桶名称

 # 配置minio文件上传的几个核心参数
  minio:
    minio_url: xxx
    minio_name: xxx
    minio_pass: xxx
    bucketName: xxxx

controller代码

如果只需要上传文件,只需要MultipartFile参数就够了。我的这几个参数都是为了完成业务逻辑

	@ApiOperation(value = "身份信息表-附件信息-上传文件", notes = "身份信息表-附件信息-上传文件")
    @PostMapping(value = "/upload")
    public Result<?> upload(MultipartFile file, Integer fileTypeDic, Integer fileCategoryDic) throws Exception {
        return identityFileInfoService.uploadMinio(file, fileTypeDic, fileCategoryDic);
    }

service代码

   /**
     * @Author 魏一鹤
     * @Description 上传到minio服务器
     * @Date 10:51 2022/12/20
     */
    Result<?> uploadMinio(MultipartFile file, Integer fileTypeDic, Integer fileCategoryDic) throws Exception;

serviceImpl代码

做主要的代码就是这在里,获取配置文件里面的几个参数。初始化一个minio客户端

这里面方法的部分参数和代码都是为了满足我个人需求,比如创建存放文件的年月目录层级,获取文件前后缀等。根据自己的需求灵活改变即可。

注意:一下代码进行了部分代码割舍,直接复制可能会报错,根据自己的需求灵活改变即可。

package org.jeecg.front.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.util.filter.FileTypeFilter;
import org.jeecg.common.util.filter.StrAttackFilter;
import org.jeecg.front.entity.IdentityFileInfo;
import org.jeecg.front.service.IdentityFileInfoService;
import org.jeecg.modules.common.FileUtils;
import org.jeecg.modules.common.IOUtils;
import org.jeecg.modules.mapper.IdentityFileInfoMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;

import static org.jeecg.modules.common.ResultCodeStatusEnum.FAIL;
import static org.jeecg.modules.common.ResultCodeStatusEnum.SUCCESS;

/**
 * @Author 魏一鹤
 * @Description 身份信息表-附件信息service接口实现类
 * @Date 2022/12/19
 **/
@Service
public class IdentityFileInfoServiceImpl extends ServiceImpl<IdentityFileInfoMapper, IdentityFileInfo> implements IdentityFileInfoService {
    // 上传路径
    @Value(value = "${jeecg.minio.minio_url}")
    private String minioUrl;
    // 上传类型 minio
    @Value(value = "${jeecg.uploadType}")
    private String uploadType;
    // 桶名称
    @Value(value = "${jeecg.minio.bucketName}")
    private String bucketName;
    // minio用户名
    @Value(value = "${jeecg.minio.minio_name}")
    private String minioName;
    // minio密码
    @Value(value = "${jeecg.minio.minio_pass}")
    private String minioPass;
    // minio客户端
    private static MinioClient minioClient = null;
    // 系统路径 
    private String sysPath = "";

    /**
     * @Author 魏一鹤
     * @Description 上传到minio服务器
     * @Date 10:51 2022/12/20
     */
    @Override
    public Result<?> uploadMinio(MultipartFile file, Integer identityInfoId, Integer fileTypeDic) throws Exception {
        Result<IdentityFileInfo> result = new Result<>();
        Calendar calendar = Calendar.getInstance();
        // 当前年份,用于拼接系统路径
        int year = calendar.get(Calendar.YEAR);
        // 当前月份,注意加1,用于拼接系统路径
        int month = calendar.get(Calendar.MONTH) + 1;
        // 格式化时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String time = sdf.format(new Date());
        // 上传后的完整路径
        String filePath = "";
        // 文件大小
        long size = file.getSize();
        // 拼接的系统上传路径
        String spliceSysPath = sysPath + year + "/" + month;
        spliceSysPath = StrAttackFilter.filter(spliceSysPath);
        FileTypeFilter.fileTypeFilter(file);
        InputStream stream = null;
        try {
            // 初始化minio客户端
            initMinio(minioUrl, minioName, minioPass);
            stream = file.getInputStream();
            // 获取原文件名 这个文件名用于文件路径拼接
            String orgName = file.getOriginalFilename();
            String objectName = null;
            // 获取原文件名 这个文件名就是原文件名
            String originalFilename = null;
            // 文件前缀
            String prefix = null;
            // 文件后缀
            String suffix = null;
            if (StringUtils.isNotBlank(orgName)) {
                originalFilename = file.getOriginalFilename();
                prefix = orgName.substring(0, orgName.lastIndexOf("."));
                // 文件后缀
                suffix = orgName.substring(orgName.lastIndexOf("."));
                objectName = spliceSysPath + "/" + prefix + "_" + time + suffix;
            }
            PutObjectArgs objectArgs = PutObjectArgs.builder()
                    .object(objectName)
                    .bucket(bucketName)
                    .contentType("application/octet-stream")
                    .stream(stream, stream.available(), -1).build();
            minioClient.putObject(objectArgs);
            filePath = minioUrl + bucketName + "/" + objectName;
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        } finally {
            if (stream != null) {
                stream.close();
            }
        }
        return result;
    }

 


    /**
     * 初始化客户端
     *
     * @param minioUrl
     * @param minioName
     * @param minioPass
     * @return
     */
    private static MinioClient initMinio(String minioUrl, String minioName, String minioPass) {
        if (minioClient == null) {
            try {
                minioClient = MinioClient.builder()
                        .endpoint(minioUrl)
                        .credentials(minioName, minioPass)
                        .build();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return minioClient;
    }


}

测试

这样访问接口的url,选择File类型的文件,就能进行文件上传了:

SpringBoot上传文件到Minio服务器,支持批量上传

在桶里面也是可以看到的

SpringBoot上传文件到Minio服务器,支持批量上传

批量文件上传

如果想要进行批量上传,也很简单。只需要把文件改为数组的格式即可:

SpringBoot上传文件到Minio服务器,支持批量上传

SpringBoot上传文件到Minio服务器,支持批量上传

SpringBoot上传文件到Minio服务器,支持批量上传

核心代码如下:

Result<?> batchUpload(MultipartFile[] files) throws Exception;

 public Result<?> batchUpload(MultipartFile[] files) throws Exception {
        Result<String> result = new Result<>();
        Calendar calendar = Calendar.getInstance();
        // 当前年份,用于拼接系统路径
        int year = calendar.get(Calendar.YEAR);
        // 当前月份,注意加1,用于拼接系统路径
        int month = calendar.get(Calendar.MONTH) + 1;
        // 格式化时间
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String time = sdf.format(new Date());
        // 上传后的完整路径
        String filePath = "";
        // 拼接的系统上传路径
        String spliceSysPath = sysPath + year + "/" + month;
        spliceSysPath = StrAttackFilter.filter(spliceSysPath);
        InputStream stream = null;
        try {
            for (MultipartFile file : files) {
                FileTypeFilter.fileTypeFilter(file);
                // 初始化minio客户端
                initMinio(minioUrl, minioName, minioPass);
                stream = file.getInputStream();
                // 获取原文件名 这个文件名用于文件路径拼接
                String orgName = file.getOriginalFilename();
                String objectName = null;
                // 文件前缀
                String prefix = null;
                // 文件后缀
                String suffix = null;
                if (StringUtils.isNotBlank(orgName)) {
                    prefix = orgName.substring(0, orgName.lastIndexOf("."));
                    // 文件后缀
                    suffix = orgName.substring(orgName.lastIndexOf("."));
                    objectName = spliceSysPath + "/" + prefix + "_" + time + suffix;
                }
                PutObjectArgs objectArgs = PutObjectArgs.builder()
                        .object(objectName)
                        .bucket(bucketName)
                        .contentType("application/octet-stream")
                        .stream(stream, stream.available(), -1).build();
                minioClient.putObject(objectArgs);
                filePath = minioUrl + bucketName + "/" + objectName;
            }
            result.setMessage(SUCCESS.getDesc());
            result.setSuccess(true);
            result.setCode(SUCCESS.getCode());
            result.setResult(filePath);
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            result.setMessage(FAIL.getDesc());
            result.setCode(FAIL.getCode());
            result.setSuccess(false);
        } finally {
            if (stream != null) {
                stream.close();
            }
        }
        return result;
    }

测试

SpringBoot上传文件到Minio服务器,支持批量上传文章来源地址https://www.toymoban.com/news/detail-481726.html

到了这里,关于SpringBoot上传文件到Minio服务器,支持批量上传的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【SpringBoot】-- 实现本地文件/图片上传到服务器生成url地址

            在java项目中你可能会有以下需求:用户上传本地图片,然后展示在网页上。本篇文章将使用阿里云oss实现上传图片到oss,oss生成url。 首先进入阿里云,按如下操作 进入创建页面,修改读写权限为公共读 然后进入bucket,创建AccessKey 创建后,保存好AccessKeyID和Acces

    2024年04月10日
    浏览(36)
  • SpringBoot如何使用MultipartFile进行文件上传保存到服务器本地

    之前一直都是用的别人封装好的文件上传方法,这次想自己写一个特别简单的,文件上传方法,非常适合新手观看… 首先需要Springboot需要有Web依赖,就是下面这个依赖 依赖导完了,下面就直接是代码,大家看一下 到这里文件上传的解释都在代码里面,下面如果报文件过大的报错还需

    2024年02月13日
    浏览(45)
  • 图片、文件资源服务器(minio服务器)

    1.MinioConfig配置类 2.MinioUtil工具类 3.对应使用方法

    2024年02月11日
    浏览(43)
  • minio文件服务器开启https

    一、准备证书 你要有https安全证书,我的是适用于nginx的证书 私钥  xxxx.key 公钥  xxxx.pem 二、上传证书到minio服务器 然后看看你的minio docker 有没有把 /root/.minio 挂载在主机上,如果有那么把两个证书文件放在/root/.minio/certs目录里面。 三、重启生效 最后重启minio容器就行了 四

    2024年02月10日
    浏览(40)
  • MinIO文件服务器,从安装到使用

    以往的项目,用的比较多的OSS服务是腾讯云和阿里云的存储服务,不过从去年到今年,最近的几个项目,普遍要使用Minio,所以我在开发服务器和测试服务器上都装上了minio 一、首先minio的安装 MInIO的安装有很多方法、单实例的、集群分布式的、docker部署的、支持k8s的,我们使

    2024年02月06日
    浏览(28)
  • Minio服务器如何设置默认文件大小

    在Minio服务器中,可以通过修改配置文件来设置默认的文件大小限制。 要更改默认文件大小限制,您可以按照以下步骤进行操作: 打开Minio服务器的配置文件。该文件通常位于 /etc/sysconfig/minio 或 /etc/default/minio (对于Ubuntu系统) 在配置文件中找到 MINIO_HTTP.Addr 一行,这是Min

    2024年02月10日
    浏览(36)
  • 申请阿里云服务器并搭建公网可支持数据上传的HTTP服务器

            拥有一台自己的云服务器可以做很多事情。阿里云服务器毫无疑问是国内最好的。         阿里云服务器可以用于各种互联网应用的搭建和运行,提供稳定、高性能的服务。         阿里云服务器的用途,包括但不限于以下几个方面: 网站托管:可以将网站

    2024年02月16日
    浏览(58)
  • 若依OSS如何支持本地上传,保存到服务器本地?

    SysOssController改动: ISysOssService改动: SysOssServiceImpl 改动: OssClient改动: windows配置: linux配置: 记得修改your.domain:8080为你自己服务器的接口ip或域名和端口。 数据示例:

    2024年04月16日
    浏览(28)
  • 分布式文件服务器——Windows环境MinIO的三种部署模式

    上节简单聊到MinIO:分布式文件存储服务——初识MinIO-CSDN博客,但没具化,本节开始展开在Windows环境下 MinIO的三种部署模式: 单机单节点、单机纠删码、集群模式 。 部署的几种模式简要概括 所谓单机单节点模式:即MinIO服务只部署到一台机器上,且只挂载一块磁盘(目录)

    2024年02月07日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包