开发好物推荐7之对象存储服务Minio

前言

开发中,一般都会单独的分离出一个文件服务器,存储对象存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。大部分我们还在用FastDFS,我要吐槽几句它部署麻烦,也没有管理界面,所以我推荐另一个对象存储服务Minio,肯定让你眼前一亮,有种相见恨晚的感觉。

推荐理由

  • 开源免费(是我们考虑的首要元素),高性能
  • 长的好看:有漂亮的界面。
  • 为云环境而生:与k8s、etcd、docker等深度集成。

  • 文档详细:提供了Java、JavaScript、Python、Golang、.Net等各种语言的sdk,集成变得更加容易

  • 部署简单

docker部署

将MiniIO的数据和配置文件夹挂在到宿主机上

<code>

docker

run -p 9090:9000 --name minio \ -e MINIO_ACCESS_KEY=admin -e MINIO_SECRET_KEY=123123123 \ -v /mydata/minio/data:/data \ -v /mydata/minio/config:/root/.minio \ -d minio/minio server /data;

/<code>


开发好物推荐7之对象存储服务Minio

访问


开发好物推荐7之对象存储服务Minio


springboot 使用minio

1 引入maven

<code>  

<

dependency

>

<

groupId

>

io.minio

groupId

>

<

artifactId

>

minio

artifactId

>

<

version

>

7.0.2

version

>

dependency

>

/<code>

2 配置 application.properties

<code>

minio.url

= http://

192.168

.

3.189

:

9090

minio.accessKey

= admin

minio.secretKey

=

123123123

minio.secure

=

false

minio.bucketName

=test

minio.configDir

=/home/data//<code>

3 注入属性

<code> 
 (prefix = 

"minio"

)

public

class

MinioConfig {

private

String

url;

private

String

accessKey;

private

String

secretKey;

private

Boolean

secure;

private

String

bucketName;

private

String

configDir;

public

MinioClient getMinioClient() throws InvalidEndpointException, InvalidPortException { MinioClient minioClient =

new

MinioClient(url, accessKey, secretKey,secure);

return

minioClient; }

public

String

getBucketName() {

return

bucketName; }

public

String

getConfigDir() {

return

configDir; }

public

String

getUrl() {

return

url; }

public

void

setUrl(

String

url) {

this

.url = url; }

public

String

getAccessKey() {

return

accessKey; }

public

void

setAccessKey(

String

accessKey) {

this

.accessKey = accessKey; }

public

String

getSecretKey() {

return

secretKey; }

public

void

setSecretKey(

String

secretKey) {

this

.secretKey = secretKey; }

public

Boolean

getSecure() {

return

secure; }

public

void

setSecure(

Boolean

secure) {

this

.secure = secure; }

public

void

setBucketName(

String

bucketName) {

this

.bucketName = bucketName; }

public

void

setConfigDir(

String

configDir) {

this

.configDir = configDir; } }/<code>

4 创建工具类

<code> 

public

class

MinioUtil {

private

MinioClient minioClient;

public

void

uploadFile(InputStream inputStream,

String

objectName) {

String

buckName =

"test"

;

try

{

if

(!minioClient.bucketExists(buckName)) { minioClient.makeBucket(buckName); } minioClient.putObject(buckName, objectName, inputStream, inputStream.available(),

"image/jpeg"

); }

catch

(Exception e) { e.printStackTrace(); } }

public

void

downloadFile(

String

bucketName,

String

fileName,

String

originalName, HttpServletResponse response) {

try

{ InputStream file = minioClient.getObject(bucketName, fileName);

String

filename =

new

String

(fileName.getBytes(

"ISO8859-1"

), StandardCharsets.UTF_8); 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(); }

catch

(ErrorResponseException e) { e.printStackTrace(); }

catch

(Exception e) { e.printStackTrace(); } } }/<code>

5 测试

<code> 

public

class

GreetingsController

{ MinioUtil minioUtil; (value =

"/{name}"

, method = RequestMethod.GET) (HttpStatus.OK)

public

String

greetingText

(@PathVariable String name,HttpServletResponse response)

throws

FileNotFoundException

{ minioUtil.uploadFile(

new

FileInputStream(

new

File(

"C:\\Users\\ctyc\\Desktop\\1.jpg"

)),

"test1.jpg"

); minioUtil.downloadFile(

"test"

,

"test1.jpg"

,

"t1.jpg"

, response);

return

"Hello "

+ name +

"!"

; } }/<code>


开发好物推荐7之对象存储服务Minio


开发好物推荐7之对象存储服务Minio


分享到:


相關文章: