在yml配置文件中配置minIO相关参数

可以选择编写一个Util工具类,来进行封装,这里我就直接写到了一个Controller里面来专门处理minIO上传和下载请求
@Slf4j
@RestController
@RequestMapping("/sys/common")
public class CommonController {
@Autowired
private ISysBaseAPI sysBaseAPI;
@Value(value = "${jeecg.path.upload}")
private String uploadpath;
@Value(value = "${jeecg.minio.minio_url}")
private String minioUrl;
@Value(value = "${jeecg.minio.minio_name}")
private String minioName;
@Value(value = "${jeecg.minio.minio_pass}")
private String minioPass;
@Value(value = "${jeecg.minio.bucketName}")
private String bucketName;
@Value(value="${jeecg.uploadType}")
private String uploadType;
@GetMapping("/403")
public Result<?> noauth() {
return Result.error("没有权限,请联系管理员授权");
}
@PostMapping(value = "/upload")
public Result<?> upload(HttpServletRequest request, HttpServletResponse response) throws Exception {
Result<?> result = new Result<>();
String savePath = "";
String bizPath = request.getParameter("biz");
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile file = multipartRequest.getFile("file");
if (file == null) {
result.setMessage("未选择上传文件!");
result.setSuccess(false);
} else {
MinioClient minioClient = MinioClient.builder().endpoint(minioUrl).credentials(minioName, minioPass).build();
if (oConvertUtils.isEmpty(bizPath)) {
if (CommonConstant.UPLOAD_TYPE_OSS.equals(uploadType)) {
bizPath = "upload";
} else {
bizPath = "";
}
}
if (CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)) {
savePath = this.uploadLocal(file, bizPath);
} else {
savePath = uploadMinio(minioClient, file, bizPath, bucketName);
}
if (oConvertUtils.isNotEmpty(savePath)) {
result.setMessage(savePath);
result.setSuccess(true);
} else {
result.setMessage("上传失败!");
result.setSuccess(false);
}
}
return result;
}
@GetMapping(value = "/download/*/{fileName}")
public void download2(HttpServletRequest request, HttpServletResponse response, @PathVariable("fileName") String fileName) throws Exception {
String uri = request.getRequestURI();
String sub1 = "/download/";
int startIndex = uri.indexOf(sub1) + sub1.length();
int endIndex = uri.lastIndexOf("/");
String filePath;
if (endIndex - startIndex != 0) {
filePath = uri.substring(startIndex, endIndex) + "/" + fileName;
} else {
filePath = fileName;
}
OutputStream outputStream = null;
try {
MinioClient minioClient = MinioClient.builder().endpoint(minioUrl).credentials(minioName, minioPass).build();
try (InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(filePath).build())) {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1) + "\"");
outputStream = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
} catch (MinioException e) {
System.out.println("MinIO错误发生: " + e.getMessage());
response.getWriter().write("MinIO错误发生:" + e.getMessage());
} catch (IOException e) {
System.out.println("IO错误发生: " + e.getMessage());
response.getWriter().write("IO错误发生:" + e.getMessage());
} finally {
if (outputStream != null) {
outputStream.flush();
outputStream.close();
}
}
}
@GetMapping(value = "/download/{fileName}")
public void download(HttpServletResponse response, @PathVariable("fileName") String fileName) throws Exception {
OutputStream outputStream = null;
try {
MinioClient minioClient = MinioClient.builder().endpoint(minioUrl).credentials(minioName, minioPass).build();
try (InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build())) {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1) + "\"");
outputStream = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
} catch (MinioException e) {
System.out.println("MinIO错误发生: " + e.getMessage());
response.getWriter().write("MinIO错误发生:" + e.getMessage());
} catch (IOException e) {
System.out.println("IO错误发生: " + e.getMessage());
response.getWriter().write("IO错误发生:" + e.getMessage());
} finally {
if (outputStream != null) {
outputStream.flush();
outputStream.close();
}
}
}
private String uploadMinio(MinioClient minioClient, MultipartFile file, String bizPath, String bucketName) throws Exception {
String fileName = generateFileName(file.getOriginalFilename());
String savePath = bizPath + "/" + fileName;
PutObjectArgs putObjectArgs = PutObjectArgs.builder()
.bucket(bucketName)
.object(savePath)
.stream(file.getInputStream(), file.getSize(), -1)
.contentType(file.getContentType())
.build();
minioClient.putObject(putObjectArgs);
return savePath;
}
private String generateFileName(String originalFileName) {
return originalFileName;
}
}