如何利用minio实现文件上传存储? 您所在的位置:网站首页 gin上传文件夹 如何利用minio实现文件上传存储?

如何利用minio实现文件上传存储?

2023-08-11 11:13| 来源: 网络整理| 查看: 265

一、将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

在这里插入图片描述

浏览器输入ip+端口号,可以进入minio客户端界面,使用设置的账号密码登录后,点击Object Browser,创建桶,可以理解为文件目录,创建的文件会存在桶下面,进入桶后也可以在客户端界面进行上传,删除等操作。本文主要讲如何通过Sprint Boot实现操作

在这里插入图片描述

二、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配置文件的内容,赋值给属性

在这里插入图片描述

@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测试

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有