一、将minio部署在docker容器中
安装好docker容器后,运行下面的命令。如果之前没有安装过minio镜像,则会自动安装并且启动一个容器。这里-p指定了两个端口,前者是api方式访问的端口,后者是客户端界面访问的端口。-e指定的是登录的账号密码。
docker run -p 9008:9000 -p 9007:9007 --name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=minioadmin" \
-e "MINIO_SECRET_KEY=minioadmin" \
-v /mydata/minio/data:/data \
-v /mydata/minio/config:/root/.minio \
minio/minio server /data --console-address ":9007"
检查容器是否正常启动,显示Up则是启动成功,PORTS也能看到指定的端口
docker pa -a
![在这里插入图片描述](https://img-blog.csdnimg.cn/fc81ef32284f40729c5e9b2c13a7cb34.png)
浏览器输入ip+端口号,可以进入minio客户端界面,使用设置的账号密码登录后,点击Object Browser,创建桶,可以理解为文件目录,创建的文件会存在桶下面,进入桶后也可以在客户端界面进行上传,删除等操作。本文主要讲如何通过Sprint Boot实现操作
![在这里插入图片描述](https://img-blog.csdnimg.cn/de23a56bd23e44feb0cb119c10daaa66.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NTM3NDgx,size_16,color_FFFFFF,t_70)
二、Spring Boot实现上传
添加minio依赖
io.minio
minio
3.0.10
在application文件中添加配置
minio:
endpoint: http://47.106.106.212:9008 #MinIO服务所在地址
bucketName: smytest #存储桶名称
accessKey: minioadmin #访问的key
secretKey: minioadmin #访问的秘钥
controller中实现上传和删除 @Value用来读取application配置文件的内容,赋值给属性
![在这里插入图片描述](https://img-blog.csdnimg.cn/9079fd1f2e884f5981aeac1f6e66f4af.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBAb3V5YW5nc29uZ19wYXNzX2ZhaWw=,size_6,color_FFFFFF,t_70,g_se,x_16)
@Api(tags = "MinioController", description = "MinIO对象存储管理")
@Controller
@RequestMapping("/minio")
public class MinioController {
private static final Logger LOGGER = LoggerFactory.getLogger(MinioController.class);
@Value("${minio.endpoint}")
private String ENDPOINT;
@Value("${minio.bucketName}")
private String BUCKET_NAME;
@Value("${minio.accessKey}")
private String ACCESS_KEY;
@Value("${minio.secretKey}")
private String SECRET_KEY;
@ApiOperation("文件上传")
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public CommonResult upload(@RequestParam("file") MultipartFile file) {
try {
//创建一个MinIO的Java客户端
MinioClient minioClient = new MinioClient(ENDPOINT, ACCESS_KEY, SECRET_KEY);
boolean isExist = minioClient.bucketExists(BUCKET_NAME);
if (isExist) {
LOGGER.info("存储桶已经存在!");
} else {
//创建存储桶并设置只读权限
minioClient.makeBucket(BUCKET_NAME);
minioClient.setBucketPolicy(BUCKET_NAME, "*.*", PolicyType.READ_ONLY);
}
String filename = file.getOriginalFilename();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
// 设置存储对象名称
String objectName = sdf.format(new Date()) + "/" + filename;
// 使用putObject上传一个文件到存储桶中
minioClient.putObject(BUCKET_NAME, objectName, file.getInputStream(), file.getContentType());
LOGGER.info("文件上传成功!");
MinioUploadDto minioUploadDto = new MinioUploadDto();
minioUploadDto.setName(filename);
minioUploadDto.setUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName);
return CommonResult.success(minioUploadDto);
} catch (Exception e) {
LOGGER.info("上传发生错误: {}!", e.getMessage());
}
return CommonResult.failed();
}
@ApiOperation("文件删除")
@RequestMapping(value = "/delete", method = RequestMethod.POST)
@ResponseBody
public CommonResult delete(@RequestParam("objectName") String objectName) {
try {
MinioClient minioClient = new MinioClient(ENDPOINT, ACCESS_KEY, SECRET_KEY);
minioClient.removeObject(BUCKET_NAME, objectName);
return CommonResult.success(null);
} catch (Exception e) {
e.printStackTrace();
}
return CommonResult.failed();
}
}
创建一个dto文件,用于返回想要的数据
@Setter@Getter
public class MinioUploadDto {
private String name;
private String url;
}
使用postman测试
![在这里插入图片描述](https://img-blog.csdnimg.cn/efe5b4492959459ab43c096d6747210c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NTM3NDgx,size_16,color_FFFFFF,t_70)
|