spring.servlet.multipart.max-file-size = 1 Mo
sur une base URL par URL--Créez l'Intercecptor suivant et déterminez la taille de MultipartFile #
MultipartFileInterceptor.java
public class MultipartFileInterceptor extends HandlerInterceptorAdapter {
private final long maxFileSize;
public MultipartFileInterceptor(long maxFileSize) {
this.maxFileSize = maxFileSize;
}
public MultipartFileInterceptor(String maxFileSize) {
this(ByteSizeUnit.toBytes(maxFileSize));
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
if (MultipartRequest.class.isInstance(request) && maxFileSize >= 0) {
MultipartRequest multipartRequest = MultipartRequest.class.cast(request);
multipartRequest.getFileMap()
.values()
.stream()
.forEach(f -> {
if (f.getSize() > maxFileSize) {
throw new MaxUploadSizeExceededException(maxFileSize);
}
});
}
return super.preHandle(request, response, handler);
}
}
--Créez un WebMvcConfigurer comme celui ci-dessous et associez l'intercepteur à l'URL que vous souhaitez contrôler.
WebMvcConfig
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Value("${app.file.max-file-size:-1}")
private String fileMaxFileSize;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MultipartFileInterceptor(fileMaxFileSize))
.addPathPatterns("/file");
}
}
ByteSizeUnit.java
public enum ByteSizeUnit {
KB {
@Override
long toBytes(long size) {
return size * UNIT_SIZE;
}
},
MB {
@Override
long toBytes(long size) {
return size * UNIT_SIZE * UNIT_SIZE;
}
},
GB {
@Override
long toBytes(long size) {
return size * UNIT_SIZE * UNIT_SIZE * UNIT_SIZE;
}
};
abstract long toBytes(long size);
static final long UNIT_SIZE = 1024;
public static long toBytes(String size) {
if (Objects.isNull(size) || size.isEmpty()) {
throw new IllegalArgumentException("size must not be empty");
}
for (ByteSizeUnit byteSizeUnit : values()) {
if (size.toUpperCase().endsWith(byteSizeUnit.name())) {
return byteSizeUnit.toBytes(Long.valueOf(size.substring(0, size.length() - byteSizeUnit.name().length())));
}
}
return Long.valueOf(size);
}
}
Veuillez me faire savoir si vous pouvez le faire avec les paramètres de Spring Boot. fin.
Recommended Posts