minio服务搭建
| 下载docker |
| snap install docker |
| 安装minio |
| docker pull minio/minio |
| 创建文件夹 |
| mkdir home/minio-data |
| 启动minio,设置登录服务的用户名密码及端口 |
| // 创建minio |
| docker run \ |
| --name minio \ |
| -p 9000:9000 \ |
| -p 9001:9001\ |
| -d \ |
| -e "MINIO_ROOT_USER=admin" \ |
| -e "MINIO_ROOT_PASSWORD=minio123" \ |
| -v /home/minio-data:/data \ |
| -v /usr/local/minio-config:/root/.minio \ |
| minio/minio server /data --console-address ":9001" --address ":9000" |
| 输入服务器ip地址加端口9001进入minio控制界面,成功进入代表服务部署成功 |
| springboot连接minio |
| 在pom.xml文件中引入minio依赖 |
| <dependency> |
| <groupId>io.minio</groupId> |
| <artifactId>minio</artifactId> |
| <version>7.1.0</version> |
| </dependency> |
| 在yml文件里加上minio配置信息 |
| #文件服务器 |
| minio: |
| url: http: |
| access-key: minio 账号 |
| secret-key: minio123 密码 |
| bucket-name: test 桶名称,minio服务器配置 |
| minio客户端配置类 |
| |
| |
| |
| @Configuration |
| public class MinioConfig { |
| @Value("${minio.accessKey}") |
| private String accessKey; |
| @Value("${minio.secretKey}") |
| private String secretKey; |
| @Value("${minio.url}") |
| private String url; |
| |
| |
| @Bean |
| public MinioClient minioClient() { |
| return MinioClient.builder() |
| .credentials(accessKey, secretKey) |
| .endpoint(url) |
| .build(); |
| } |
| } |
| 上传文件的接口和工具类,接口写在若依的 ruoyi-admin包controller.common.CommonContrller中 |
| |
| @Value("${minio.bucket-name}") |
| private String bucketName; |
| |
| @Value("${minio.url}") |
| private String minioUrl; |
| 接口调用 |
| @PostMapping("/uploadMinio") |
| public AjaxResult uploadFileMinio(MultipartFile file) throws Exception |
| { |
| try |
| { |
| String fileName = FileUploadUtils.uploadMinio(file,this.bucketName); |
| AjaxResult ajax = AjaxResult.success(); |
| String url = minioUrl + fileName; |
| ajax.put("url", url); |
| ajax.put("fileName", fileName); |
| ajax.put("newFileName", FileUtils.getName(fileName)); |
| ajax.put("originalFilename", file.getOriginalFilename()); |
| return ajax; |
| } |
| catch (Exception e) |
| { |
| return AjaxResult.error(e.getMessage()); |
| } |
| } |
| 添加通用工具类,ruo-common包utils.file中的FileUploadUtils添加如下方法 |
| private static final String uploadMinio(String bucketName, MultipartFile file, String[] allowedExtension) |
| throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, |
| InvalidExtensionException |
| { |
| int fileNamelength = file.getOriginalFilename().length(); |
| if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) |
| { |
| throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); |
| } |
| |
| assertAllowed(file, allowedExtension); |
| |
| try { |
| String fileName = extractFilename(file); |
| |
| return MinioUtil.uploadFile(bucketName, fileName, file); |
| } catch (Exception e){ |
| e.printStackTrace(); |
| } |
| return ""; |
| |
| } |
| public static final String uploadMinio(MultipartFile file,String Name) throws IOException |
| { |
| try |
| { |
| return uploadMinio(Name,file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); |
| } |
| catch (Exception e) |
| { |
| throw new IOException(e.getMessage(), e); |
| } |
| } |
| 添加minio工具类,创建MinioUtil类 |
| package com.ruoyi.common.utils.file; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| import com.ruoyi.common.utils.spring.SpringUtils; |
| import io.minio.*; |
| import io.minio.http.Method; |
| import org.springframework.web.multipart.MultipartFile; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| |
| |
| public class MinioUtil { |
| |
| |
| |
| |
| |
| public static String uploadFile(String bucketName, String fileName, MultipartFile multipartFile) throws IOException |
| { |
| String url = ""; |
| MinioClient minioClient = SpringUtils.getBean(MinioClient.class); |
| try (InputStream inputStream = multipartFile.getInputStream()) { |
| boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); |
| if (!found) |
| { |
| minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); |
| |
| |
| |
| String READ_WRITE = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"],\"Resource\":[\"arn:aws:s3:::" + bucketName + "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\",\"s3:PutObject\",\"s3:AbortMultipartUpload\"],\"Resource\":[\"arn:aws:s3:::" + bucketName + "/*\"]}]}"; |
| minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(READ_WRITE).build()); |
| } |
| minioClient.putObject(PutObjectArgs.builder().bucket(bucketName) |
| .object(fileName) |
| .stream(inputStream, multipartFile.getSize(), -1) |
| .contentType(multipartFile.getContentType()).build() |
| ); |
| |
| url = "/" + bucketName+ "/" + fileName; |
| |
| return url; |
| } catch (Exception e) { |
| throw new IOException(e.getMessage(), e); |
| } |
| } |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人