docker pull minio/minio
mkdir ~/minio
cd ~/minio
mkdir data
mkdir config
docker run --name minio \
-p 9000:9000 \
-p 9999:9999 \
-d --restart=always \
-e "MINIO_ROOT_USER=minio" \
-e "MINIO_ROOT_PASSWORD=minio123" \
-v /home/minio/data:/data \
-v /home/minio/config:/root/.minio \
minio/minio server /data \
--console-address '0.0.0.0:9999'
date // 查看系统时间
hwclock // 查看硬件时间
yum -y install ntp ntpdate //安装ntpdate工具
ntpdate cn.pool.ntp.org //设置系统时间与网络时间同步
hwclock --systohc //将系统时间写入硬件时间
io.minio
minio
7.0.1
server:
port: 80
spring:
application:
name: book-minio
<--上传文件大小设置-->
servlet:
multipart:
max-file-size: 10MB
max-request-size: 100MB
minio:
accesskey: minio
endpoint: http://192.168.126.138:9000
secretKey: minio123456
bucketName: song
@Data
@ConfigurationProperties(prefix = "minio")
public class MinioPro {
/**
* 端点
*/
private String endpoint;
/**
* 用户名
*/
private String accessKey;
/**
* 密码
*/
private String secretKey;
/**
* 桶名称
*/
private String bucketName;
}
MinioClient
@Configuration
@EnableConfigurationProperties(MinioPro.class)
public class MinioConfiguration {
@Resource
private MinioPro minioPro;
/**
* 初始化 MinIO 客户端
*/
@Bean
public MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {
return new MinioClient(minioPro.getEndpoint(), minioPro.getAccessKey(), minioPro.getSecretKey());
}
}
@RestController
@RequestMapping("/minio")
@Validated
@Slf4j
public class FileUploadController {
@Resource
private MinioClient minioClient;
@Autowired
private MinioPro minio;
@PostMapping(value = "/upload", headers = "content-type=multipart/form-data")
public String uploadFile(@RequestParam("file") MultipartFile file){
String bucketName = minio.getBucketName();
String objectName;
String objectUrl = null;
try {
boolean bucketExists = minioClient.bucketExists(bucketName);
if (!bucketExists) {
minioClient.makeBucket(bucketName);
}
// 设置上传文件名
String filename = file.getOriginalFilename();
objectName = System.currentTimeMillis() + "_" + filename;
// 上传配置
PutObjectOptions options = new PutObjectOptions(file.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE);
options.setContentType(file.getContentType());
minioClient.putObject(bucketName, objectName, file.getInputStream(), options);
objectUrl = minioClient.getObjectUrl(minio.getBucketName(), objectName);
} catch (Exception e) {
log.error("上传文件失败", e.getMessage());
return "上传文件失败";
}
return objectUrl;
}
}
注意:上传可能报错 ,原因是硬件时间与系统时间不一致造成,Minio的设时间不能相差太多,不然无法上传,解决方式: 按照上述 设置系统时间与网络时间同步 重新设置一下