package com.hjy.test.common.util;
import org.apache.poi.poifs.filesystem.FileMagic;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import java.io.BufferedInputStream;
import java.util.Objects;
/**
* <p>
* 文件相关工具类
* </p>
*
* @author jingyang.he
* @since 2022-06-10 11:06
*/
public class FileUtil {
/**
* 日志对象
*/
private static final Logger LOGGER = LoggerFactory.getLogger(FileUtil.class);
/**
* excel格式
*/
private static final String XLS = "xls";
private static final String XLSX = "xlsx";
/**
* 校验文件格式是excel
* tips:poi at least 3.17
*
* @param file 文件
* @return true校验成功,false校验失败
*/
public static boolean isExcelFile(MultipartFile file) {
// 校验文件非空
if (file == null || file.isEmpty()) {
LOGGER.error("FileUtil.isExcelFile,导入文件不能为空!", file);
return false;
}
// 校验文件名
String filename = file.getOriginalFilename();
if (filename == null) {
LOGGER.error("FileUtil.isExcelFile,导入文件不合法!", filename);
return false;
}
// 校验后缀为xls和xlsx
String suffix = filename.substring(filename.lastIndexOf(".") + 1);
if (!XLS.equals(suffix) && !XLSX.equals(suffix)) {
LOGGER.error("FileUtil.isExcelFile,文件格式不正确 ", suffix);
return false;
}
// 使用魔数校验,防止恶意修改图片文件导入
try {
BufferedInputStream bis = new BufferedInputStream(file.getInputStream());
FileMagic fileMagic = FileMagic.valueOf(bis);
if (Objects.equals(fileMagic, FileMagic.OLE2) || Objects.equals(fileMagic, FileMagic.OOXML)) {
return true;
}
LOGGER.error("FileUtil.isExcelFile,文件格式不正确 ", suffix);
} catch (Exception e) {
LOGGER.error("FileUtil.isExcelFile,校验excel文件失败 ", e);
}
return false;
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容