minio最新配置
import io.minio.MinioClient; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @EnableConfigurationProperties(MinIOProperties.class) public class MinIOConfig { @Bean public MinioClient minioClient(MinIOProperties minIOProperties){ MinioClient minioClient = new MinioClient(minIOProperties.getEndpoint(), minIOProperties.getAccessKey(), minIOProperties.getSecretKey()); return minioClient; } }
@Data @ConfigurationProperties(prefix = "minio") public class MinIOProperties { private String endpoint; private String accessKey; private String secretKey; private String bucketName; }
import io.minio.GetObjectArgs; import io.minio.MinioClient; import io.minio.PutObjectArgs; import io.minio.RemoveObjectArgs; import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.file.Paths; import java.util.UUID; @Service public class MinIOTemplate { @Autowired private MinioClient minioClient; @Autowired private MinIOProperties properties; /** * 上传文件 */ public String upload(MultipartFile file) { // 原文件名 String originalFilename = file.getOriginalFilename(); // 获取文件的后缀 String suffix = originalFilename.substring(originalFilename.lastIndexOf(".")); // 构造新的文件名,名字不重复 String objectName = UUID.randomUUID().toString() + suffix; // 上传文件 try { PutObjectArgs putObjectArgs = PutObjectArgs.builder() .contentType(file.getContentType()) .stream(file.getInputStream(), file.getSize(), -1) .bucket(properties.getBucketName()) .object(objectName) .build(); minioClient.putObject(putObjectArgs); } catch (Exception e) { throw new RuntimeException("上传文件失败: " + e.getMessage()); } return properties.getEndpoint() + "/" + properties.getBucketName() + "/" + objectName; } /** * 上传文件 */ public String upload(String name, InputStream inputStream, String contentType){ // 上传文件 try { PutObjectArgs putObjectArgs = PutObjectArgs.builder() .contentType(contentType) .stream(inputStream, inputStream.available(), -1) .bucket(properties.getBucketName()) .object(name) .build(); minioClient.putObject(putObjectArgs); } catch (Exception e) { throw new RuntimeException("上传文件失败: " + e.getMessage()); } return properties.getEndpoint() + "/" + properties.getBucketName() + "/" + name; } /** * 删除文件 */ public void delete(String url){ String objectName = url.replace(properties.getEndpoint()+"/","") .replace(properties.getBucketName()+"/",""); RemoveObjectArgs args = RemoveObjectArgs.builder() .bucket(properties.getBucketName()) .object(objectName) .build(); try { minioClient.removeObject(args); } catch (Exception e) { throw new RuntimeException("删除文件失败: " + e.getMessage()); } } /** * 下载文件 */ public ResponseEntity download(String url){ String objectName = url.replace(properties.getEndpoint()+"/","") .replace(properties.getBucketName()+"/",""); GetObjectArgs args = GetObjectArgs.builder() .bucket(properties.getBucketName()) .object(objectName) .build(); InputStream inputStream = null; try { inputStream = minioClient.getObject(args); byte[] bytes = IOUtils.toByteArray(inputStream); // 使用复制的数据创建 InputStreamResource InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(bytes)); String filename = Paths.get(objectName).getFileName().toString(); HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename); headers.add(HttpHeaders.CACHE_CONTROL, "no-cache, no-store, must-revalidate"); headers.add(HttpHeaders.PRAGMA, "no-cache"); headers.add(HttpHeaders.EXPIRES, "0"); return ResponseEntity.ok() .headers(headers) .contentType(MediaType.APPLICATION_OCTET_STREAM) .body(resource); } catch (Exception e) { throw new RuntimeException("下载文件失败: " + e.getMessage()); } } }
@Api(tags = "minio模板管理") @RestController @RequestMapping("/api/minio/upAndDown") @Slf4j public class MinoTemplateController { @Autowired private MinIOTemplate minIOTemplate; @PostMapping("/upload") @ApiOperation(value = "图片上传接口") public Result uploadFile(MultipartFile file){ try { String imgUrl = minIOTemplate.upload(file); return Result.success(imgUrl); } catch (Exception e) { e.printStackTrace(); return Result.error("上传失败"); } } @ApiOperation("下载文件") @GetMapping("/down") public ResponseEntity downLoadFile(@RequestParam String pathUrl){ ResponseEntity inputStreamResourceResponseEntity = minIOTemplate.download(pathUrl); return inputStreamResourceResponseEntity; } }
minio: endpoint: http://192.168.1.1:9000 accessKey: name secretKey: password bucketName: admin
spring: servlet: multipart: max-file-size: 10MB max-request-size: 20MB
(图片来源网络,侵删)
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。