RuoYiPlus+Minio (OSS功能)

本文详细指导了在Windows10上安装Minio,包括下载、配置文件夹、启动服务、获取AccessKey和SecretKey,以及在RuoYiPlus中配置Minio并测试文件上传的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、安装Minio

这里只介绍win10如何安装

第一步,下载minio.exe文件

http://dl.minio.org.cn/server/minio/release/windows-amd64/minio.exe

第二步,准备一个存放将来保存文件用的文件夹

我自己用的是

E:\zhihuFile\

 第三步,在minio.exe目录下启动cmd 并输入以下命令 

minio.exe server E:\zhihuFile\
  • 这个命令是本机部署
  • 后面路径是第二步设置的文件夹的路径 

 第四步,运行成功后不要关闭cmd窗口,打开下面的网址

http://127.0.0.1:9000/

登录账户和密码在cmd窗口有,第一次应该是minioadmin,账户和密码都是。

 第五步,创建AccessKey

 保存好Accessey和SecretKey,RuoYiPlus配置界面会用到

第六步,新建bucket,直接新建,输入名字即可完成创建。

 到这一步,如果上传文件的话会上传到以下文件夹中

E:\zhihuFile\zhihu\

二、在RuoYiPlus中配置Minio(只启动RuoyiApplication可以的)

第一步,在RuoYiPlus系统中,打开文件管理页面。系统管理/文件管理。点击配置管理。

 第二步,修改第一条记录。

第三步,只需要修改三个地方,如下图所示。是你自己新建的Access Key 和bucket,填上并保存。

 第四步,进行测试,回到文件管理,点击上传文件,进行测试。(我第一次测试有点卡,刷新了一下,文件也是上传了,第二次文件上传很顺利)。

 成功后如下

 也可以在文件夹中找到(我自己不太懂怎么存储的,初学者哈哈)

 完成!!

安装minio参考了:Minio 对象存储使用简单入门_minio endpoint_utada hikki的博客-优快云博客

### 实现图片预览功能 为了实现基于Spring Boot和MinIO的图片预览服务,可以按照如下方式构建应用程序。此方法允许上传图像到MinIO服务器并提供HTTP接口用于获取这些文件以便于前端展示。 #### 创建Spring Boot项目结构 首先创建一个新的Spring Boot应用,在`pom.xml`中加入必要的依赖项来支持Web开发以及对象存储操作: ```xml <dependencies> <!-- Web support --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MinIO client library --> <dependency> <groupId>io.min.io</groupId> <artifactId|minio|version>8.4.3</artifactId> </dependency> ... </dependencies> ``` #### 配置MinIO连接属性 在项目的配置文件application.properties里定义访问MinIO所需的信息: ```properties minio.endpoint=http://localhost:9000 minio.accessKey=YOUR_ACCESS_KEY minio.secretKey=YOUR_SECRET_KEY minio.bucketName=image-preview-bucket ``` #### 编写Controller处理请求 接下来编写控制器类以接收来自客户端的文件上传请求并将它们保存至指定桶内;同时也应暴露API供读取已存入的对象数据流返回给调用者显示出来。 ```java @RestController @RequestMapping("/api/images") public class ImagePreviewController { private final MinioClient minioClient; private static final String BUCKET_NAME; @Autowired public ImagePreviewController(MinioClient minioClient, @Value("${minio.bucketName}") String bucketName) { this.minioClient = minioClient; BUCKET_NAME = bucketName; try { if (!this.minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) { this.minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } } catch (Exception e) { throw new RuntimeException(e); } } /** * Uploads a file to MinIO. */ @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile multipartFile) throws Exception { PutObjectArgs objectArgs = PutObjectArgs.builder() .stream(multipartFile.getInputStream(), multipartFile.getSize(), -1L) .object(multipartFile.getOriginalFilename()) .contentType(MediaType.IMAGE_JPEG_VALUE)// or other types as needed .bucket(BUCKET_NAME) .build(); minioClient.putObject(objectArgs); return ResponseEntity.ok("Successfully uploaded"); } /** * Retrieves an image from MinIO by its name. */ @GetMapping(value="/{imageName}", produces = {MediaType.IMAGE_JPEG_VALUE}) public void getImageByName(HttpServletResponse response, @PathVariable("imageName") String imageName) throws IOException { GetObjectResponse getObjectResponse = null; InputStream inputStream = null; try { StatObjectResponse statObjRes = minioClient.statObject(StatObjectArgs.builder().bucket(BUCKET_NAME).object(imageName).build()); // Set content type based on actual MIME type of stored objects response.setContentType(statObjRes.contentType()); getObjectResponse = minioClient.getObject(GetObjectArgs.builder().bucket(BUCKET_NAME).object(imageName).build()); IOUtils.copy(getObjectResponse, response.getOutputStream()); } finally { if (getObjectResponse != null){ getObjectResponse.close(); } } } } ``` 通过上述代码片段可见,当接收到POST请求时会将传来的二进制数据流转储成对应名称的新资源放置于预先设定好的容器之中[^3];而GET请求则负责依据路径参数定位特定条目并通过响应体直接传输原始字节序列回送给浏览器端解析渲染[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值