Tika 检验上传文件的类型

@PostMapping("/upload")
public R<String> upload(@RequestPart("file") MultipartFile file) {
    if (file.isEmpty()) {
        return R.fail("文件为空,请选择文件");
    }

    // 文件大小校验
    if (file.getSize() > maxSize) {
        return R.fail("文件大小超出限制 (" + maxSize / 1024 + "KB)");
    }

    LocalDateTime now = LocalDateTime.now();
    String dirName = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    File dir = new File(uploadPath, dirName);
    if (!dir.exists()) {
        dir.mkdirs();
    }
    String fileName = now.format(DateTimeFormatter.ofPattern("HH-mm-ss")) + "_" + UUID.randomUUID();

    // 保存文件
    try {
        File destFile = new File(dir, fileName);
        file.transferTo(destFile);

        // 只允许上传 png、jpg、jpeg 文件,通过 mimetype 校验
        Tika tika = new Tika();
        String mimeType = tika.detect(destFile);
        if (!"image/png".equalsIgnoreCase(mimeType)
                && !"image/jpeg".equalsIgnoreCase(mimeType)
                && !"image/jpg".equalsIgnoreCase(mimeType)
        ) {
            destFile.delete();
            return R.fail("只允许上传 png、jpg、jpeg 文件");
        }
    } catch (Exception e) {
        log.error("上传文件失败", e);
        return R.fail("上传失败");
    }

    return R.success(accessPrefix + "/" + dirName + "/" + fileName);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容