java - 使用 Spring Java 验证文件大小限制多部分
问题描述
有人能帮我吗?我在使用 multipart 验证 Rest 控制器中的文件大小限制时遇到问题,但它不起作用。我已经获得了多部分的大小并添加了一些 if 语句来消息文件的超出限制但它不起作用。
@RequestMapping(value = "/importCsvFile", method = RequestMethod.POST)
public ResponseEntity<?> importCsvFile(MultipartFile inputFile) throws Exception {
if (inputFile == null || inputFile.isEmpty()) {
return new ResponseEntity<>("Please insert a CSV file.", HttpStatus.NOT_FOUND);
}
if (!inputFile.getContentType().equals("application/vnd.ms-excel")) {
return new ResponseEntity<>("Upload CSV file only.", HttpStatus.NOT_ACCEPTABLE);
}
if (inputFile.getSize() > 1048576) { **====> File size limit**
return new ResponseEntity<>("File too Large.", HttpStatus.NOT_ACCEPTABLE);
}
else {
List<Object> items = objectSrvc.importCsvFile(inputFile.getInputStream());
if (items == null) {
return new ResponseEntity<List<Object>>(HttpStatus.NO_CONTENT);
}
return new ResponseEntity<List<Object>>(items, HttpStatus.OK);
}
}
解决方案
如果您将使用 SpringBoot,您可以通过 propertyapplication.yml
或来完成application.properties
,例如:
servlet:
multipart:
max-file-size: 5MB
max-request-size: 120MB
enabled: true
此外,您可以创建自定义验证器:
@Component
public class MultipartFileSizeValidator implements ConstraintValidator<MultipartFileSizeValid, List<?>> {
private static final String ERROR_MESSAGE = "File too Large.";
private static final long FILE_SIZE = 1048576L;
@Override
public boolean isValid(final List<?> value, final ConstraintValidatorContext context) { context.buildConstraintViolationWithTemplate(ERROR_MESSAGE).addConstraintViolation();
return inputFile.getSize() > FILE_SIZE;
}
}
和您自己的验证注释:
@Target({FIELD})
@Retention(RUNTIME)
@Constraint(validatedBy = MultipartFileSizeValidator.class)
public @interface MultipartFileSizeValid {
String message() default "DEFAULT_ERROR_MESSAGE";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
使用新注释创建请求类型:
@AllArgsConstructor
@Getter
public class Request {
@MultipartFileSizeValid
private final MultipartFile file;
}
并将@Valid 添加到控制器中:
@RequestMapping(value = "/importCsvFile", method = RequestMethod.POST)
public ResponseEntity<?> importCsvFile(@Valid Request request) {...}
并在您的控制器中使用此注释,@Validated
有关应用自定义验证注释的更多信息,请参见此处
推荐阅读
- excel - Excel 格式日期从 DATEVALUE 到 TEXT 与公式
- javascript - 如果数据集为空,Chart.js 饼图将显示“无数据”
- c# - 使用 wmi 在远程计算机上启动 exe 文件时出现问题
- android - 菜单项单击时的警报对话框
- version-control - 关于我的源代码控制设置的问题 - 我应该使用分支还是多个存储库?
- vba - 使用宏对网站进行截图然后粘贴
- javascript - 为什么我在 jQuery 中收到 ERR_CERT_COMMON_NAME_INVALID 错误?
- python - 分页异步迭代器协议不可用(Azure SDK for Python)
- ruby - FactoryBot 未在创建后回调中创建关联模型列表
- javascript - 有没有办法一次多次调用 JavaScript 中的函数?使用 puppeteer