#需要注意的是 1.必须先开启minio 2.Springboot内嵌的Tomcat限制了单个文件/图片只能是1MNB的大小,超过了这个默认的大小就会抛出异常。
package com.ruoyi.config.minio;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
/**
* @author 马震
* @version 1.0
* @date 2024/2/29 11:17
*/
@Component
//需要在配置文件中假的访问路径前缀
@ConfigurationProperties(prefix = "mz.minio")
@Data
public class MinioConfig {
private String endpoint;//访问的实际名字 要跟这个对应上
private String bucket;
}
package com.sky.config.minio;
import com.alibaba.druid.util.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* 解决了文件上传后 复制路径不能预览的问题
*/
public enum MinioUploadEnum {
DEFAULT("default","application/octet-stream"),
PNG("png", "image/png"),
JPEG("jpeg", "image/jpeg"),
JPG("jpg", "image/jpeg"),
GIF("gif", "image/gif"),
WBMP("wbmp", "image/vnd.wap.wbmp"),
TIFF("tiff", "image/tiff"),
JFIF("jfif", "image/jpeg"),
TIF("tif", "image/tiff"),
FAX("fax", "image/fax"),
JPE("jpe", "image/jpeg"),
NET("net", "image/pnetvue"),
RP("rp", "image/vnd.rn-realpix"),
ICO("ico", "image/x-icon");
private String prefix;
private String type;
private static final Map<String, MinioUploadEnum> ENUM_MAP = new HashMap<>();
static {
MinioUploadEnum[] values = values();
for (MinioUploadEnum value : values) {
ENUM_MAP.put(value.getPrefix(), value);
}
}
public static String getTypeByPrefix(String prefix) {
MinioUploadEnum viewContentTypeEnum = ENUM_MAP.get(prefix);
if (viewContentTypeEnum == null) {
return prefix;
}
return viewContentTypeEnum.getType();
}
public static String getContentType(String prefix){
if(StringUtils.isEmpty(prefix)){
return DEFAULT.getType();
}
prefix = prefix.substring(prefix.lastIndexOf(".") + 1);
String type = getTypeByPrefix(prefix);
if (! StringUtils.isEmpty(type)) {
return type;
}
return DEFAULT.getType();
}
MinioUploadEnum(String prefix, String type) {
this.prefix = prefix;
this.type = type;
}
public String getPrefix() {
return prefix;
}
public String getType() {
return type;
}
}
package com.sky.config.minio;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.util.UUID;
/**
* @author 马震
* @version 1.0
* @date 2024/3/4 15:53
*/
@Component
public class MinioUtil {
@Autowired
MinioConfig minioConfig;
public String uploadMinioFile(MultipartFile file){
String filename = file.getOriginalFilename();
try {
//截取原始文件名的后缀
String extension = null;
if(filename != null){
extension = filename.substring(filename.lastIndexOf("."));
}
//构造新文件名称
String objectName = UUID.randomUUID().toString() + extension;
long size = file.getSize();//获取文件长度
if(size>1*1024*1024){
throw new RuntimeException("文件长度不能大于1MB");
}
//构建minio对象
MinioClient build = MinioClient.builder()
.endpoint(minioConfig.getEndpoint())
.build();
//赋值
build.putObject(PutObjectArgs.builder()
.bucket(minioConfig.getBucket())
.object(objectName)
.contentType(MinioUploadEnum.getContentType(objectName))
.stream(file.getInputStream(),file.getSize(),-1)
.build());
String filePath = minioConfig.getEndpoint()+"/"+minioConfig.getBucket()+"/"+objectName;//发送路径给前端
return filePath;
}catch (Exception e){
e.printStackTrace();
throw new RuntimeException("文件上传失败");
}
}
}
前端写法
由于博主就是个前端小白 也就能写这样了 真的尽力了