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
(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
