package com.example.jz.service.impl; import cn.hutool.core.util.IdUtil; import com.example.jz.config.MinIOConfig; import com.example.jz.exception.BusinessException; import com.example.jz.service.MinIOService; import io.minio.GetPresignedObjectUrlArgs; import io.minio.MinioClient; import io.minio.PutObjectOptions; import io.minio.UploadObjectArgs; import io.minio.errors.*; import io.minio.http.Method; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.TimeUnit; @Service public class MinIOServiceImpl implements MinIOService { @Autowired MinioClient minioClient; @Autowired MinIOConfig minIOConfig; @Override public String getPreviewFileUrl(String fileName) { String res = null; try { res = minioClient.getPresignedObjectUrl( GetPresignedObjectUrlArgs.builder() .method(Method.GET) .bucket(minIOConfig.getBucketName()) .object(fileName) .build()); } catch (Exception e) { throw new BusinessException("获取文件预览地址失败"); } return res; } @Override public String upload(MultipartFile file) { String objectName = null; try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); objectName = sdf.format(new Date()) + "/" + IdUtil.simpleUUID() + "." + file.getContentType().split("/")[1]; PutObjectOptions putObjectOptions = new PutObjectOptions(file.getInputStream().available(), -1); putObjectOptions.setContentType(file.getContentType()); minioClient.putObject(minIOConfig.getBucketName(), objectName, file.getInputStream(), putObjectOptions); } catch (Exception e) { throw new BusinessException("上传文件失败"); } return objectName; } @Override public Boolean delete(String fileName) { try { minioClient.removeObject(minIOConfig.getBucketName(), fileName); } catch (Exception e) { throw new BusinessException("删除文件失败"); } return true; } }