使用springjava验证文件大小限制多部分

rmbxnbpk  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(435)

有人能帮我吗?我在使用multipart验证rest控制器中的文件大小限制时遇到了一个问题,但它不起作用。我已经得到了multipart的大小,并添加了一些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);
        }
    }
oknrviil

oknrviil1#

如果你使用springboot,你可以按属性来做 application.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 在控制器中,有关应用自定义验证注解的更多信息,请参见此处

相关问题