minio对象存储
MinIO 是高性能的对象存储,是为海量数据存储、人工智能、大数据分析而设计的,它完全兼容Amazon S3接口,单个对象最大可达5TB,适合存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像等。MinIO主要采用Golang语言实现,,客户端与存储服务器之间采用http/https通信协议。
官网: https://min.io/
中文文档:http://docs.minio.org.cn/docs/
下载地址:https://min.io/download
github: https://github.com/minio/minio
一、minio安装(单机)
1、创建相关目录
cd /opt
mkdir minio
mkdir data
touch minio.log
2、下载安装包并赋予权限
wget https://dl.minio.io/server/minio/release/linux-amd64/minio
chmod 777 minio
3、设置环境变量
vim /etc/profile
# set minio environment
export MINIO_ROOT_USER=fileadmin
export MINIO_ROOT_PASSWORD=fileadmin
4、启动minio
nohup /opt/minio/minio server /opt/minio/data --console-address ":35555" > /opt/minio/minio.log 2>&1 &
nohup 和 末尾& :后台启动
/opt/minio/data:文件存储路径
–console-address:控制台固定端口
2>&1:在标准输出直接输入到/opt/minio/minio.log 中
5、控制台访问
http://172.169.3.251:62222/buckets 帐号密码:fileadmin fileadmin
5.1、创建bucket


5.2、创建用户


5.3、创建Service Accounts


二、springboot使用
1、pom.xml
<dependency><groupId>io.miniogroupId><artifactId>minioartifactId><version>8.2.1version>
dependency>
2、application.yml
spring:servlet:multipart:max-file-size: 10MBmax-request-size: 10MB
#minio配置minio:access-key: 控制台创建的用户名(test)secret-key: 密码 (12345678)url: http://minio服务器IP:9000 (http://127.0.0.1:9000)bucket-name: 控制台创建的bucket (test)
3、minio配置文件
import io.minio.MinioClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@ConfigurationProperties(prefix = "spring.minio")
@Data
public class MinioConfiguration {private String accessKey;private String secretKey;private String url;private String bucketName;@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();}}
4、minio工具类
import com.wdhcr.minioupload.config.MinioConfiguration;
import io.minio.*;
import io.minio.http.Method;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.time.ZonedDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;@Component
public class MinioComp {@Autowiredprivate MinioClient minioClient;@Autowiredprivate MinioConfiguration configuration;/*** @description: 获取上传临时签名*/public Map getPolicy(String fileName, ZonedDateTime time) {PostPolicy postPolicy = new PostPolicy(configuration.getBucketName(), time);postPolicy.addEqualsCondition("key", fileName);try {Map<String, String> map = minioClient.getPresignedPostFormData(postPolicy);HashMap<String, String> map1 = new HashMap<>();map.forEach((k, v) -> {map1.put(k.replaceAll("-", ""), v);});map1.put("host", configuration.getUrl() + "/" + configuration.getBucketName());return map1;} catch (Exception e) {e.printStackTrace();}return null;}/*** @description: 获取上传文件的url*/public String getPolicyUrl(String objectName, Method method, int time, TimeUnit timeUnit) {try {return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(method).bucket(configuration.getBucketName()).object(objectName).expiry(time, timeUnit).build());} catch (Exception e) {e.printStackTrace();}return null;}/*** @description: 上传文件*/public void upload(MultipartFile file, String fileName) {// 使用putObject上传一个文件到存储桶中。try {InputStream inputStream = file.getInputStream();minioClient.putObject(PutObjectArgs.builder().bucket(configuration.getBucketName()).object(fileName).stream(inputStream, file.getSize(), -1).contentType(file.getContentType()).build());} catch (Exception e) {e.printStackTrace();}}/*** 删除文件*/public void remove(String objectName) {try {minioClient.removeObject(RemoveObjectArgs.builder().bucket(configuration.getBucketName()).object(objectName).build());} catch (Exception e) {e.printStackTrace();}}/*** 获取文件访问地址*/public String getUrl(String objectName, int time, TimeUnit timeUnit) {String url = null;try {url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(configuration.getBucketName()).object(objectName).expiry(time, timeUnit).build());} catch (Exception e) {e.printStackTrace();}return url;}}
5、controller测试类
import com.wdhcr.minioupload.component.MinioComp;
import com.wdhcr.minioupload.domain.R;
import io.minio.http.Method;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.time.ZonedDateTime;
import java.util.Map;
import java.util.concurrent.TimeUnit;@RestController
public class UploadController {@Autowiredprivate MinioComp minioComp;@PostMapping("/upload")public R upload(@RequestParam("file") MultipartFile file, @RequestParam("fileName") String fileName) {minioComp.upload(file, fileName);String url = minioComp.getUrl(fileName, 7, TimeUnit.DAYS);return R.success(url);}@GetMapping("/policy")public R policy(@RequestParam("fileName") String fileName) {Map policy = minioComp.getPolicy(fileName, ZonedDateTime.now().plusMinutes(10));return R.success(policy);}@GetMapping("/uploadUrl")public R uploadUrl(@RequestParam("fileName") String fileName) {String url = minioComp.getPolicyUrl(fileName, Method.PUT, 2, TimeUnit.MINUTES);return R.success(url);}@GetMapping("/url")public R getUrl(@RequestParam("fileName") String fileName) {String url = minioComp.getUrl(fileName, 7, TimeUnit.DAYS);return R.success(url);}}
6、测试用例
import com.wdhcr.minioupload.component.MinioComp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.UUID;
import java.util.concurrent.TimeUnit;@SpringBootTest
class MinioUploadApplicationTests {@Autowiredprivate MinioComp minioComp;@Testvoid upload() throws IOException {File pdfFile = new File("D://application.properties");FileInputStream fileInputStream = new FileInputStream(pdfFile);MultipartFile multipartFile = new MockMultipartFile(pdfFile.getName(), pdfFile.getName(), "application/octet-stream", fileInputStream);String filename = UUID.randomUUID().toString() + "-" + multipartFile.getOriginalFilename();minioComp.upload(multipartFile, filename);String url = minioComp.getUrl(filename, 7, TimeUnit.DAYS);System.err.println(url);}@Testpublic void remove() {minioComp.remove("application.properties");}}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
