赞
踩
官网:MinIO | Code and downloads to create high performance object storage
下载后是一个minio.exe的文件,可以先创一个文件夹来存放数据以及文件
在文件的目录下cmd进入控制台
minio.exe server data
启动成功后控制台会打印账号密码
访问地址:http://127.0.0.1:9000,输入账号密码登录页面
创建桶
解读一下:
bucket name:bucket名字。
versioning: 版本控制允许在同一个键下保留同一个对象的多个版本。
object locking:对象锁定防止对象被删除。需要支持保留和合法持有。只能在创建桶时启用。
quota:配额用于限制桶内的数据量。
retention:保留是指在一段时间内防止对象删除的规则。为了设置桶保留策略,必须启用版本控制。
文件上传测试
在官网下找到最新的依赖包
添加依赖后,在yml文件下配置相关配置
添加minio的配置文件,注意:@Value的注解导入是spring的原生注解
- @Data
- @Configuration
- @ConfigurationProperties(prefix = "minio")
- public class MinioConfig {
- @Value("${minio.endpoint}")
- private String endpoint;
- @Value("${minio.access-key}")
- private String accessKey;
- @Value("${minio.secret-key}")
- private String secretKey;
- @Value("${minio.bucket-name}")
- private String bucketName;
-
- @Bean
- public MinioClient minioClient(){
- return MinioClient.builder().endpoint(endpoint).credentials(accessKey,secretKey).build();
- }
- }
创建工具类,实现文件上传
- /**
- * 上传文件到指定的存储桶中
- *
- * @param bucketName 存储桶名称
- * @param file 上传的文件
- * @param objectName 存储对象的名称
- * @param contentType 文件的内容类型
- * @return 文件上传的响应对象
- * @throws Exception 如果上传过程中发生异常
- */
- @SneakyThrows(Exception.class)
- public ObjectWriteResponse uploadFile(String bucketName, MultipartFile file, String objectName, String contentType) {
- InputStream inputStream = file.getInputStream();
- return minioClient.putObject(
- PutObjectArgs.builder()
- .bucket(bucketName)
- .object(objectName)
- .contentType(contentType)
- .stream(inputStream, inputStream.available(), -1)
- .build());
- }
controller层实现接口调用
- @PostMapping("/upload")
- public String upload(@RequestParam("file") MultipartFile file) {
- try {
- System.out.println(123);
- //文件名
- String fileName = file.getOriginalFilename();
- String newFileName = System.currentTimeMillis() + "." + StringUtils.substringAfterLast(fileName, ".");
- //类型
- String contentType = file.getContentType();
- minioTemplate.uploadFile(minioConfig.getBucketName(), file, newFileName, contentType);
- return "上传成功";
- } catch (Exception e) {
- e.printStackTrace();
- log.error("上传失败");
- return "上传失败";
- }
- }
postman测试结果
创建Bucket时需要记录Endpoint访问节点
再在管理创建用户拿到对应的ID以及Secret
在yml文件中配置相对应的配置
创建OSS配置文件以及工具类
- @Service
- public class FileServiceImpl implements FileService {
-
- @Autowired
- private OSSConfig ossConfig;
- private Logger log;
-
-
- @Override
- public String upload(MultipartFile file) {
- //获取相关配置
- String bucketName = ossConfig.getBucketName();
- String endPoint = ossConfig.getEndPoint();
- String accessKeyId = ossConfig.getAccessKeyId();
- String accessKeySecret = ossConfig.getAccessKeySecret();
-
- //创建OSS对象
- OSS ossClient = new OSSClientBuilder().build(endPoint, accessKeyId, accessKeySecret);
-
- //获取原生文件名
- String originalFilename = file.getOriginalFilename();
- //JDK8的日期格式
- LocalDateTime time = LocalDateTime.now();
- DateTimeFormatter dft = DateTimeFormatter.ofPattern("yyyy/MM/dd");
-
- //拼装OSS上存储的路径
- String folder = dft.format(time);
- String fileName = generateUUID();
- String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
-
- //在OSS上bucket下的文件名
- String uploadFileName = "user/" + folder + "/" + fileName + extension;
-
- try {
- PutObjectResult result = ossClient.putObject(bucketName, uploadFileName, file.getInputStream());
- //拼装返回路径
- if (result != null) {
- return "https://"+bucketName+"."+endPoint+"/"+uploadFileName;
- }
- } catch (IOException e) {
- log.error("文件上传失败:{}",e.getMessage());
- } finally {
- //OSS关闭服务,不然会造成OOM
- ossClient.shutdown();
- }
- return null;
- }
-
-
- /**
- * 获取随机字符串
- * @return
- */
- private String generateUUID() {
- return UUID.randomUUID().toString().replaceAll("-", "").substring(0, 32);
- }
- }
OSSconfig
- @ConfigurationProperties(prefix = "aliyun.oss")
- @Configuration
- @Data
- public class OSSConfig {
-
- private String endPoint;
- private String accessKeyId;
- private String accessKeySecret;
- private String bucketName;
-
- }
Controller层进行测试
- @PostMapping("/upload")
- public Map<String , Object> uploadFile(@RequestPart("file") MultipartFile file) {
- String FileStr = fileService.upload(file);
- return buildResult(FileStr);
- }
测试结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。