package com.rft.syshopmanage.controller;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import io.minio.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* MinIO对象存储管理Controller
*/
@Controller
@RequestMapping("/minio")
public class MinioController {
private String ENDPOINT = "MinIO服务所在地址 例:http://xxxxxx:9020";
private String BUCKET_NAME = "存储桶名称";
private String ACCESS_KEY = "访问的key";
private String SECRET_KEY = "访问的秘钥";
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public JSONObject upload(@RequestPart("file") MultipartFile file) {
JSONObject returnData = new JSONObject();
try {
//创建一个MinIO的Java客户端
MinioClient minioClient = MinioClient.builder()
.endpoint(ENDPOINT)
.credentials(ACCESS_KEY,SECRET_KEY)
.build();
boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(BUCKET_NAME).build());
if (isExist) {
System.out.println("存储桶已经存在!");
} else {
//创建存储桶并设置只读权限
minioClient.makeBucket(MakeBucketArgs.builder().bucket(BUCKET_NAME).build());
BucketPolicyConfigDto bucketPolicyConfigDto = createBucketPolicyConfigDto(BUCKET_NAME);
SetBucketPolicyArgs setBucketPolicyArgs = SetBucketPolicyArgs.builder()
.bucket(BUCKET_NAME)
.config(JSONUtil.toJsonStr(bucketPolicyConfigDto))
.build();
minioClient.setBucketPolicy(setBucketPolicyArgs);
}
String filename = file.getOriginalFilename();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
// 设置存储对象名称
String objectName = sdf.format(new Date()) + "/" + filename;
// 使用putObject上传一个文件到存储桶中
PutObjectArgs putObjectArgs = PutObjectArgs.builder()
.bucket(BUCKET_NAME)
.object(objectName)
.contentType(file.getContentType())
.stream(file.getInputStream(), file.getSize(), ObjectWriteArgs.MIN_MULTIPART_SIZE).build();
minioClient.putObject(putObjectArgs);
System.out.println("文件上传成功!");
//返回文件名
returnData.put("filename",filename);
//返回文件url
returnData.put("url",ENDPOINT + "/" + BUCKET_NAME + "/" + objectName);
return returnData;
} catch (Exception e) {
e.printStackTrace();
System.out.println("上传发生错误!");
}
return returnData;
}
/**
* 创建存储桶的访问策略,设置为只读权限
*/
private BucketPolicyConfigDto createBucketPolicyConfigDto(String bucketName) {
BucketPolicyConfigDto.Statement statement = BucketPolicyConfigDto.Statement.builder()
.Effect("Allow")
.Principal("*")
.Action("s3:GetObject")
.Resource("arn:aws:s3:::"+bucketName+"/*.**").build();
return BucketPolicyConfigDto.builder()
.Version("2012-10-17")
.Statement(CollUtil.toList(statement))
.build();
}
@RequestMapping(value = "/delete", method = RequestMethod.POST)
@ResponseBody
public JSONObject delete(@RequestParam("objectName") String objectName) {
JSONObject returnData = new JSONObject();
try {
MinioClient minioClient = MinioClient.builder()
.endpoint(ENDPOINT)
.credentials(ACCESS_KEY,SECRET_KEY)
.build();
minioClient.removeObject(RemoveObjectArgs.builder().bucket(BUCKET_NAME).object(objectName).build());
returnData.put("msg","成功");
return returnData;
} catch (Exception e) {
e.printStackTrace();
}
returnData.put("msg","失败");
return returnData;
}
}
大角鹿
- 粉丝: 9
- 资源: 2
最新资源
- 射频电路基础复习提纲(2024年): 射频电路基本原理与应用
- 计算机二级培训ppt,培训教程课程安排格式
- 用C语言写出一个简单的圣诞树,让你的朋友们体验一下程序员的浪漫,点开即令哦!
- 空中俯视物体检测17-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar
- XC3568H-IPC工控主机用户手册.pdf
- java+sql server项目之科帮网计算机配件报价系统源代码.zip
- plsqldev1305x64连接数据工具
- 智能车开发案例,使用Python语言在一个文件中实现 这里我们将添加一些额外的功能,如自动驾驶模式、避障、超声波传感器读取以及通过TCP/IP网络远程控制
- 空中俯视物体检测18-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar
- 电赛案例,C++简单的智能家居系统,其中包含了温度监测、光照控制和报警系
- 西工大noj100题参考题解及注意事项(2024).zip
- 西工大noj100题参考题解及注意事项(2024).pdf
- java项目之仓库管理系统项目源代码.zip
- 基于python的图书管理系统demo脚本
- java项目之物流配货项目源代码.zip
- java项目之物资管理系统项目源代码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈