minio文件服务器备份,springboot2.2.X手册:放弃fastdfs,整合Minio做文件服务器真香...

溪云阁:专注编程教学,架构,JAVA,Python,微服务,机器学习等,欢迎关注获取源码,篇幅较长,建议先收藏。

目录

minio文件服务器备份,springboot2.2.X手册:放弃fastdfs,整合Minio做文件服务器真香..._第1张图片

什么是Minio

Minio是Apcche旗下的一款开源的轻量级文件服务器,基于对象存储,协议是基于Apache License v2.0,开源可用于商务。

Minio主要用来存储非结构化的数据,类似文件,图片,照片,日志文件,各类备份文件等,按照官网描述,文件的大小从几KB到5TB。

Minio提供了非常方便,友好的界面,并且文档也是非常丰富,具体可以参考它的docs

htt ps://docs.min.io/cn/minio-quickstart-guide.html

为什么选择Minio

以前小编使用阿里的OSS,但是是真的贵,后来使用FastDFS,在友好度上,并不友善,不过这一块仁者见仁智者见智,不做参考,各位看官按照自己喜欢的就行。

Minio是支持docker安装的,非常方便,小编现在的私人服务器上,就是用的docker安装方式,支持多租户,高可用用集群多节点来做,这个上面的网址都有详细说明,文档还是非常丰富的。

整合Minio

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"

xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

4.0.0

com.boots

boots

1.1.0.RELEASE

boots-module-minio

boots-module-minio

http://maven.apache.org

UTF-8

io.minio

minio

7.0.2

com.boots

module-boots-exception

2.0.0.RELEASE

属性类

/**

* All rights Reserved, Designed By 溪云阁

* Copyright: Copyright(C) 2016-2020

*/

package com.boots.module.minio;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.context.annotation.Configuration;

import lombok.Data;

/**

* minio属性文件

* @author:溪云阁

* @date:2020年6月7日

*/

@Data

@Configuration

@ConfigurationProperties(prefix = "boots.module.minio")

public class MinioData {

/**

* minio地址+端口号

*/

private String url;

/**

* minio用户名

*/

private String accessKey;

/**

* minio密码

*/

private String secretKey;

/**

* 文件桶的名称

*/

private String bucketName;

}

配置类

在这个配置类里面,是可以拓展的minioClient的,编写自己喜欢的方法,小编这里为了演示方便,就直接采用原来,其实都是一样的,只不过有些人喜欢按照自己的风格重写一遍而已。

/**

* All rights Reserved, Designed By 溪云阁

* Copyright: Copyright(C) 2016-2020

*/

package com.boots.module.minio;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import com.module.boots.exception.CommonRuntimeException;

import io.minio.MinioClient;

import lombok.extern.slf4j.Slf4j;

/**

* minio客户端配置

* @author:溪云阁

* @date:2020年6月7日

*/

@Slf4j

@Configuration

public class MinioConfig {

@Autowired

private MinioData minioData;

/**

* 初始化minio客户端,不用每次都初始化

* @author 溪云阁

* @return MinioClient

*/

@Bean

public MinioClient minioClient() {

try {

return new MinioClient(minioData.getUrl(), minioData.getAccessKey(), minioData.getSecretKey());

}

catch (final Exception e) {

log.error("初始化minio出现异常:{}", e.fillInStackTrace());

throw new CommonRuntimeException(e.fillInStackTrace());

}

}

}

配置文件

######配置基本信息######

##配置应用名称

spring.application.name: boots-minio

##配置时间格式,为了避免精度丢失,全部换成字符串

spring.jackson.timeZone: GMT+8

spring.jackson.dateFormat: yyyy-MM-dd HH:mm:ss

spring.jackson.generator.writeNumbersAsStrings: true

# 上传文件总的最大值

spring.servlet.multipart.max-request-size: 10MB

# 单个文件的最大值

spring.servlet.multipart.max-file-size: 10MB

## minio文件系统

boots.module.minio.url: http://127.0.0.1:9000

boots.module.minio.accessKey: minio

boots.module.minio.secretKey: 123456

boots.module.minio.bucketName: boots

接口类

/**

* All rights Reserved, Designed By 溪云阁

* Copyright: Copyright(C) 2016-2020

*/

package com.boots.minio.view.minio.view;

import java.io.InputStream;

import java.net.URLEncoder;

import javax.servlet.http.HttpServletResponse;

import org.apache.tomcat.util.http.fileupload.IOUtils;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.http.MediaType;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.multipart.MultipartFile;

import com.boots.module.minio.MinioData;

import com.module.boots.api.message.ResponseMsg;

import com.module.boots.api.utils.MsgUtils;

import com.module.boots.exception.CommonRuntimeException;

import io.minio.MinioClient;

import io.minio.ObjectStat;

import io.minio.PutObjectOptions;

import io.swagger.annotations.Api;

import io.swagger.annotations.ApiOperation;

import lombok.SneakyThrows;

/**

* minio上传,下载,删除接口

* @author:溪云阁

* @date:2020年6月7日

*/

@SuppressWarnings("deprecation")

@Api(tags = { "web服务:minio上传,下载,删除接口" })

@RestController

@RequestMapping("view/minio")

public class MinioView {

@Autowired

private MinioClient minioClient;

@Autowired

private MinioData minioData;

/**

* 下载文件

* @author 溪云阁 void

*/

@ApiOperation(value = "下载文件")

@GetMapping(value = "/download")

@SneakyThrows(Exception.class)

public void download(@RequestParam("fileName") String fileName, HttpServletResponse response) {

InputStream in = null;

final ObjectStat stat = minioClient.statObject(minioData.getBucketName(), fileName);

response.setContentType(stat.contentType());

response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));

in = minioClient.getObject(minioData.getBucketName(), fileName);

IOUtils.copy(in, response.getOutputStream());

in.close();

}

/**

* 上传文件

* @author 溪云阁

* @param file

* @return

* @throws Exception ResponseMsg

*/

@ApiOperation(value = "上传文件")

@PostMapping(value = "/upload")

@SneakyThrows(Exception.class)

public ResponseMsg upload(@RequestParam("file") MultipartFile file) throws Exception {

if (file.isEmpty()) {

throw new CommonRuntimeException("上传文件不能为空");

} else {

// 得到文件流

final InputStream is = file.getInputStream();

// 文件名

final String fileName = file.getOriginalFilename();

// 把文件放到minio的boots桶里面

minioClient.putObject(minioData.getBucketName(), fileName, is, new PutObjectOptions(is.available(), -1));

// 关闭输入流

is.close();

return MsgUtils.buildSuccessMsg("上传成功");

}

}

/**

* 删除文件

* @author 溪云阁

* @param fileName

* @return ResponseMsg

*/

@ApiOperation(value = "删除文件")

@GetMapping(value = "/delete", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)

@SneakyThrows(Exception.class)

public ResponseMsg delete(@RequestParam("fileName") String fileName) {

minioClient.removeObject(minioData.getBucketName(), fileName);

return MsgUtils.buildSuccessMsg("删除成功");

}

}

测试

运行后,我们查看接口文档,已经写好3个方法了

minio文件服务器备份,springboot2.2.X手册:放弃fastdfs,整合Minio做文件服务器真香..._第2张图片

minio文件服务器备份,springboot2.2.X手册:放弃fastdfs,整合Minio做文件服务器真香..._第3张图片

--END--

原创作品,抄袭必究,转载注明出处

如需要源码,转发,关注后私信我

部分图片或代码来源网络,如侵权请联系删除,谢谢!

你可能感兴趣的:(minio文件服务器备份)