package com.atguigu.spzx.manager.controller;
import com.atguigu.spzx.manager.service.FileUploadService;
import com.atguigu.spzx.model.vo.common.Result;
import com.atguigu.spzx.model.vo.common.ResultCodeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@RestController
@RequestMapping("/admin/system")
public class FileUploadController {
@Autowired
private FileUploadService fileUploadService;
// <input type="file" name="file"/>
@PostMapping("/fileUpload")
public Result fileUpload(MultipartFile file) {
//1 获取上传的文件
//2 调用service的方法上传,返回minio路径
String url = fileUploadService.upload(file);
return Result.build(url, ResultCodeEnum.SUCCESS);
}
}
package com.atguigu.spzx.manager.service.impl;
import cn.hutool.core.date.DateUtil;
import com.atguigu.spzx.common.exception.GuiguException;
import com.atguigu.spzx.manager.properties.MinioProperties;
import com.atguigu.spzx.manager.service.FileUploadService;
import com.atguigu.spzx.model.vo.common.ResultCodeEnum;
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.errors.MinioException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.util.UUID;
@Service
public class FileUploadServiceImpl implements FileUploadService {
@Autowired
private MinioProperties minioProperties;
@Override
public String upload(MultipartFile file) {
try {
// 创建MinioClient对象
MinioClient minioClient =
MinioClient.builder()
.endpoint(minioProperties.getEndpointUrl())
.credentials(minioProperties.getAccessKey(),
minioProperties.getSecreKey())
.build();
// 创建bucket
boolean found =
minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProperties.getBucketName()).build());
if (!found) {
// Make a new bucket called 'asiatrip'.
minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProperties.getBucketName()).build());
} else {
System.out.println("Bucket 'asiatrip' already exists.");
}
//获取上传文件名称
// 1 每个上传文件名称唯一的 uuid生成 01.jpg
//2 根据当前日期对上传文件进行分组 20230910
// 20230910/u7r54209l097501.jpg
String dateDir = DateUtil.format(new Date(), "yyyyMMdd");
String uuid = UUID.randomUUID().toString().replaceAll("-","");
String filename = dateDir+"/"+uuid+file.getOriginalFilename();
// 文件上传
minioClient.putObject(
PutObjectArgs.builder().bucket(minioProperties.getBucketName())
.object(filename)
.stream(file.getInputStream(), file.getSize(), -1)
.build());
//获取上传文件在minio路径
//http://127.0.0.1:9000/spzx-bucket/01.jpg
String url = minioProperties.getEndpointUrl()+"/"+minioProperties.getBucketName()+"/"+filename;
return url;
} catch (Exception e) {
e.printStackTrace();
throw new GuiguException(ResultCodeEnum.SYSTEM_ERROR);
}
}
}