minio最新配置

06-18 1316阅读

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
minio最新配置
(图片来源网络,侵删)
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]