博客详情

springboot中整合minio文件存储服务 (原创)

作者: 朝如青丝暮成雪
发布时间:2019-12-07 18:03:06  文章分类:java编程   阅读(9186)  评论(0)

项目minio-spring代码:


1、pom.xml中引入

<!--内嵌tomcat支持 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <scope>provided</scope>
    </dependency>
    <!-- 引入jsp 、jstl支持  -->
    <dependency>
      <groupId>org.apache.tomcat.embed</groupId>
      <artifactId>tomcat-embed-jasper</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
    </dependency>

 <!--minio 对象存储  -->
    <dependency>
      <groupId>io.minio</groupId>
      <artifactId>minio</artifactId>
      <version>6.0.11</version>
    </dependency>

  <!--commons-io 流操作 (可选)-->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.6</version>
    </dependency>


2、application.yml配置



server:
  port: 8081
  servlet:
    context-path: /minioserver


spring:
  application:
    name: minio-spring
  mvc:
    view:
      prefix: /WEB-INF/pages
      #suffix: .jsp

  servlet:
    multipart:
      max-file-size: 20MB
      max-request-size: 20MB


minio:
  endpoint: http://192.168.11.10:9000
  accesskey: admin
  secretKey: 12345678


3、MinioProp.java属性文件


package com.tingcream.miniospring.config;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

 
@Getter
@Setter
@ConfigurationProperties(prefix = "minio")
@Component
public class MinioProp {
    private String endpoint;//连接url
    private String accesskey;//用户名
    private String secretKey;//密码

}


4、MinioConfiguration.java 核心配置类


package com.tingcream.miniospring.config;

import io.minio.MinioClient;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

 
@Configuration
@EnableConfigurationProperties(MinioProp.class)
public class MinioConfiguration {
    @Autowired
    private MinioProp minioProp;


    @Bean
    public MinioClient  minioClient() throws InvalidPortException, InvalidEndpointException {
        MinioClient  client =new MinioClient(minioProp.getEndpoint(),minioProp.getAccesskey(),minioProp.getSecretKey());
        return  client;
    }

}


5、CommonConstants.java 常量配置


package com.tingcream.miniospring.common;

public class CommonConstants {

    public static final  String MINIO_BUCKET="mybucket";
}


6、MinioController.java 文件上传、下载


package com.tingcream.miniospring.controller;

import com.tingcream.miniospring.common.CommonConstants;
import com.tingcream.miniospring.common.RetMsg;
import io.minio.MinioClient;
import io.minio.ObjectStat;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * minio文件管理,上传、下载文件
 */
@Controller
@RequestMapping("/minio")
public class MinioController {

    @Autowired
    private MinioClient minioClient;


    @GetMapping("/upload")
    public String upload(){
        return "/upload.jsp";
    }

    @ResponseBody
    @PostMapping("/upload")
    public RetMsg upload(@RequestParam(name = "file",required = false) MultipartFile file, HttpServletRequest request){
        if(file==null || file.getSize()==0){
          return RetMsg.failure("上传文件不能为空");
        }
        String orgfileName = file.getOriginalFilename();
        try {
            InputStream in = file.getInputStream();
            String contentType= file.getContentType();
            minioClient.putObject(CommonConstants.MINIO_BUCKET,orgfileName,in,null, null, null, contentType);
            Map<String,Object> data=new HashMap<>();
            data.put("bucketName",CommonConstants.MINIO_BUCKET);
            data.put("fileName",orgfileName);
            return RetMsg.success(data);
        } catch (Exception e) {
            e.printStackTrace();
        }
         return RetMsg.failure("上传失败");
    }

    @RequestMapping("/download")
    public void download(HttpServletRequest request, HttpServletResponse response,String fileName) {
        InputStream in=null;
        try {
            //获取文件对象 stat原信息
            ObjectStat stat =minioClient.statObject(CommonConstants.MINIO_BUCKET, fileName);
            response.setContentType(stat.contentType());
            //response.setContentType("application/octet-stream; charset=UTF-8");
            in =   minioClient.getObject(CommonConstants.MINIO_BUCKET, fileName);
            IOUtils.copy(in,response.getOutputStream());
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(in!=null){
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }

}
7、upload.jsp



<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
<h2>文件上传</h2>
<form accept-charset="UTF-8" action="${pageContext.request.contextPath}/minio/upload" method="post"
  enctype="multipart/form-data" target="_blank">
    文件:<input type="file"  name="file" />
    <input type="submit" value="上传"/>
</form>

</body>
</html>




关键字:  minio  springboot
评论信息
暂无评论
发表评论

亲,您还没有登陆,暂不能评论哦! 去 登陆 | 注册

博主信息
   
数据加载中,请稍候...
文章分类
   
数据加载中,请稍候...
阅读排行
 
数据加载中,请稍候...
评论排行
 
数据加载中,请稍候...

Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1

鄂公网安备 42011102000739号