在 Spring 中上传时验证多部分文件

Validating a multipart file on upload in spring

提问人:user1555190 提问时间:11/17/2023 更新时间:11/18/2023 访问量:32

问:

我有一个spring boot应用程序,允许我上传文件,如下所示:

public ResponseEntity<Object> saveEmployee( @RequestParam("file") final MultipartFile multipartFile) {
    employeeS3Service.save(multipartFile);
    return ResponseEntity.ok().build();
}

我想做的是在保存到 s3 之前,我想验证它的 contens。有没有简单的方法可以做到这一点?所以我阅读每一行并检查内容?

java spring-boot)

评论


答:

0赞 Georgii Lvov 11/17/2023 #1

是的,您可以使用提供的 来验证文件的内容,以读取内容,然后执行验证逻辑:InputStreamMultipartFile

import org.springframework.web.multipart.MultipartFile;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

class Validator {
    public void validateFileContents(MultipartFile multipartFile) throws IOException {
        try (InputStream inputStream = multipartFile.getInputStream();
             BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {

            String line;
            while ((line = reader.readLine()) != null) {
                // Perform your validation logic for each line
                if (!isValid(line)) {
                    throw new IllegalArgumentException("Invalid content in the file");
                }
            }
        }
    }

    private boolean isValid(String line) {
        // Your validation logic here
        // For example, check if the line meets certain criteria
        // Return true if valid, false otherwise
        return true;
    }
}

评论

0赞 Georgii Lvov 11/21/2023
@user1555190,如果我的回答对您有帮助且可以接受,请单击“接受它作为答案”
0赞 Georgii Lvov 11/23/2023
@user1555190,这个答案对你有用吗?至少留下一些反馈总是好的,因为这将表明您尊重帮助您解决问题的社区成员
0赞 Ahmed Mera 11/18/2023 #2

您可以尝试创建这样的 validtor 类:

import org.springframework.web.multipart.MultipartFile;

public class FileValidator {

    public static boolean validateFile(MultipartFile file) {
        // Perform your validation checks here
        try {
            // Read the file contents
            byte[] fileBytes = file.getBytes();
            String fileContent = new String(fileBytes);

            // Example validation
            if (fileContent.contains("invalidKeyword")) {
                // File content is not valid
                return false;
            }

            // Add more validation checks as needed

        } catch (Exception e) {
           // handel error
           return false;
        }

        // File content is valid
        return true;
    }
}

然后使用 FileValidator:

public ResponseEntity<Object> saveEmployee( @RequestParam("file") final MultipartFile multipartFile) {


      if (!FileValidator.validateFile(file)) {
           return ResponseEntity.status(HttpStatus.BAD_REQUEST)
                    .body("Invalid file content");
        }

     // Proceed with saving the file to S3 or perform other actions
     employeeS3Service.save(multipartFile);
      
     return ResponseEntity.ok("File uploaded successfully");
}