<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.4.5</version>
</dependency>
minio:#minio地址endpoint: http://127.0.0.1:9000 #账号accessKey: minioadmin#密码 secretKey: minioadmin#桶名称 bucketName: bucketName
@Configuration
public class MinIoClientConfig {@Value("${minio.endpoint}")private String endpoint;@Value("${minio.accessKey}")private String accessKey;@Value("${minio.secretKey}")private String secretKey;@BeanMinioClient minioClient() {return MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();}
}
@Slf4j
@Component
public class MinioUtils {@Autowiredprivate MinioClient minioClient;@Autowiredprivate MinioInfo minioInfo;/*** 上传文件** @param file* @param bucketName* @return* @throws Exception*/public String uploadFile(MultipartFile file, String bucketName) {if (null == file || 0 == file.getSize()) {log.error("msg{}", "上传文件不能为空");return null;}try {// 判断是否存在createBucket(bucketName);// 原文件名String originalFilename = file.getOriginalFilename();InputStream inputStream = file.getInputStream();minioClient.putObject(PutObjectArgs.builder().bucket(bucketName) // 桶名称.object(originalFilename) // 文件存储名称.stream(inputStream, file.getSize(), -1).contentType(file.getContentType()).build());inputStream.close();return minioInfo.getEndpoint() + "/" + bucketName + "/" + originalFilename;} catch (Exception e) {log.error("上传失败:{}", e.getMessage());}log.error("msg", "上传失败");return null;}/*** 通过字节流上传** @param imageFullPath* @param bucketName* @param imageData* @return*/public String uploadImage(String imageFullPath,String bucketName,byte[] imageData) {ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(imageData);try {// 判断是否存在createBucket(bucketName);minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(imageFullPath).stream(byteArrayInputStream, byteArrayInputStream.available(), -1).contentType(".jpg").build());return minioInfo.getEndpoint() + "/" + bucketName + "/" + imageFullPath;} catch (Exception e) {log.error("上传失败:{}", e.getMessage());}log.error("msg", "上传失败");return null;}/*** 删除文件** @param bucketName* @param fileName* @return*/public int removeFile(String bucketName, String fileName) {try {// 判断桶是否存在boolean res = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());if (res) {// 删除文件minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build());}} catch (Exception e) {System.out.println("删除文件失败");e.printStackTrace();return 1;}System.out.println("删除文件成功");return 0;}/*** 下载文件** @param fileName* @param bucketName* @param response*/public void fileDownload(String fileName,String bucketName,HttpServletResponse response) {InputStream inputStream = null;OutputStream outputStream = null;try {if (StringUtils.isBlank(fileName)) {response.setHeader("Content-type", "text/html;charset=UTF-8");String data = "文件下载失败";OutputStream ps = response.getOutputStream();ps.write(data.getBytes("UTF-8"));return;}outputStream = response.getOutputStream();// 获取文件对象inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());byte buf[] = new byte[1024];int length = 0;response.reset();response.setHeader("Content-Disposition", "attachment;filename=" +URLEncoder.encode(fileName.substring(fileName.lastIndexOf("/") + 1), "UTF-8"));response.setContentType("application/octet-stream");response.setCharacterEncoding("UTF-8");// 输出文件while ((length = inputStream.read(buf)) > 0) {outputStream.write(buf, 0, length);}System.out.println("下载成功");inputStream.close();} catch (Throwable ex) {response.setHeader("Content-type", "text/html;charset=UTF-8");String data = "文件下载失败";try {OutputStream ps = response.getOutputStream();ps.write(data.getBytes("UTF-8"));} catch (IOException e) {e.printStackTrace();}} finally {try {outputStream.close();if (inputStream != null) {inputStream.close();}} catch (IOException e) {e.printStackTrace();}}}/*** 通过字节流下载* @param fileName 文件名称* @param bucketName 桶名称* @return*/public byte[] byteDownload(String fileName,String bucketName) {InputStream inputStream = null;try {inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());byte[] buffer = StreamUtils.copyToByteArray(inputStream);inputStream.read(buffer);inputStream.close();return buffer;} catch (Exception e) {throw new RuntimeException(e);}}@SneakyThrowspublic void createBucket(String bucketName) {// 如果不存在就创建if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());}}
}