CentOS环境下Minio的安装,并实现文件的上传
一、CentOS环境下安装Minio
CentOS环境下安装Minio的方式有多种,下面将依次介绍常规安装方式及docker安装方式。
常规安装方式
1.创建Minio安装目录,并在线下载Minio
mkdir -p /usr/local/minio/data #创建minio安装目录
cd /usr/local/minio
yum -y install wget
wget https://dl.min.io/server/minio/release/linux-amd64/minio #使用wget下载minio
chmod +x minio #修改权限
2.开放Minio访问端口号
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9001/tcp --permanent
firewall-cmd --reload
3.使用vim start-minio.sh 命令创建可运行Minio的Shell脚本,切换到start-minio.sh文件所在目录,并使用./start-minio.sh命令运行执行脚本,使用tailf minio.log 命令可查看Minio的运行状况。start-minio.sh文件内容如下所示。
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=minioadmin
nohup /usr/local/minio/minio server --address ':9000' --console-address ':9001' /usr/local/minio/data > /usr/local/minio/minio.log 2>&1 &
基于docker的安装方式
1.查看docker环境是否正常
docker search minIO
2.拉取Minio镜像
docker pull minio/minio
3.查看镜像
docker images
4.创建Minio容器
docker run -d -p 9000:9000 --name minio \
-p 9001:9001 \
-e 'MINIO_ACCESS_KEY=minioadmin' \
-e 'MINIO_SECRET_KEY=minioadmin' \
-v /usr/share/minio/data:/data \
-v /usr/share/minio/config:/root/.minio \
minio/minio server /data \
--address ':9000' --console-address ':9001'
5.查看日志
docker logs -f minio
二、使用Minio实现文件上传
1.添加Maven依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.1</version>
</dependency>
2.添加application.yml配置
# Miniio配置
minio:
endpoint: 127.0.0.1
port: 9000
accessKey: minioadmin
secretKey: minioadmin
secure: false
bucketName: "miniodemo"
3.Minio配置类
@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {
private final static String HTTP = "http://";
//endPoint是一个URL,域名,IPv4或者IPv6地址
private String endpoint;
//TCP/IP端口号
private int port;
//accessKey类似于用户ID,用于唯一标识你的账户
private String accessKey;
//secretKey是你账户的密码
private String secretKey;
//如果是true,则用的是https而不是http,默认值是true
private Boolean secure;
//默认存储桶
private String bucketName;
@Bean
public MinioClient getClient() {
MinioClient minioClient =
MinioClient.builder()
.endpoint("http://" + endpoint + ":" + port)
.credentials(accessKey, secretKey)
.build();
return minioClient;
}
}
4.文件上传
@RestController
@RequestMapping("file")
@Slf4j
public class UploadFileController {
@Autowired
private MinioConfig minioConfig;
@Resource
private MinioClient minioClient;
@PostMapping("upload")
public void uploadFile(@RequestParam(value = "file") MultipartFile file) {
String fileName = file.getOriginalFilename();
if (fileName == null) {
throw new RuntimeException();
}
InputStream inputStream = null;
String bucketName = minioConfig.getBucketName();
try {
if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
minioClient
.makeBucket(MakeBucketArgs.builder()
.bucket(bucketName).build());
}
String datePath = LocalDate.now()
.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
String uuid = UUID.randomUUID().toString().replace("-", "");
String extension = FilenameUtils.getExtension(fileName);
fileName = datePath + "/" + uuid + "." + extension;
String objectName = "/" + bucketName + "/" + fileName;
inputStream = file.getInputStream();
minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.contentType(file.getContentType())
.object(fileName)
.stream(inputStream,inputStream.available(), -1)
.build());
String url = minioClient
.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
.method(Method.PUT)
.bucket(bucketName)
.object(fileName)
.expiry(1, TimeUnit.DAYS)
.build());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
log.debug("inputStream close IOException:" + e.getMessage());
}
}
}
}
}