| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- package com.mooctest.crowd.site.util;
- import cn.afterturn.easypoi.excel.ExcelImportUtil;
- import cn.afterturn.easypoi.excel.entity.ImportParams;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.web.multipart.MultipartFile;
- import java.io.*;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.NoSuchElementException;
- /**
- * @author: Diors.Po
- * @Email: 171256175@qq.com
- * @date 2019-08-05 19:57
- */
- @Slf4j
- public class FileUtil {
- public static final Map<String, String> FILE_TYPE_MAP = new HashMap<>(); //本系统中合法的文件类型
- static {
- //图片
- FILE_TYPE_MAP.put("ffd8ff", "jpg"); //JPEG (jpg)
- FILE_TYPE_MAP.put("89504e", "png"); //PNG (png)
- FILE_TYPE_MAP.put("474946", "gif"); //GIF (gif)
- FILE_TYPE_MAP.put("49492a", "tif"); //TIFF (tif)
- FILE_TYPE_MAP.put("492049", "tif");
- FILE_TYPE_MAP.put("4d4d00", "tif");
- FILE_TYPE_MAP.put("424d22", "bmp"); //16色位图(bmp)
- FILE_TYPE_MAP.put("424d82", "bmp"); //24位位图(bmp)
- FILE_TYPE_MAP.put("424d8e", "bmp"); //256色位图(bmp)
- //压缩文件
- FILE_TYPE_MAP.put("504b03", "zip");
- FILE_TYPE_MAP.put("504b05", "zip");
- FILE_TYPE_MAP.put("504b07", "zip");
- FILE_TYPE_MAP.put("526172", "rar");
- //文档
- FILE_TYPE_MAP.put("255044", "pdf"); //Adobe Acrobat (pdf)
- FILE_TYPE_MAP.put("504b03", "docx");//docx文件,xlsx等一致
- FILE_TYPE_MAP.put("d0cf11", "doc/dot"); //MS Excel 注意:word、msi 和 excel的文件头一样
- FILE_TYPE_MAP.put("0d444f", "doc/dot");
- FILE_TYPE_MAP.put("cf11e0", "doc/dot");
- FILE_TYPE_MAP.put("dba52d", "doc/dot");
- FILE_TYPE_MAP.put("d0cf11", "wps/wks");//WPS文字wps、表格et、演示dps都是一样的
- FILE_TYPE_MAP.put("0e574b", "wps/wks");
- FILE_TYPE_MAP.put("ff0002", "wps/wks");
- //exe可执行文件
- FILE_TYPE_MAP.put("4d5a90", "exe");
- }
- public static String save(String dirPath, MultipartFile inputFile, String fileName) throws IOException {
- byte[] bs = new byte[1024];
- int len;
- File saveDir = new File(dirPath);
- if (!saveDir.exists()) {
- saveDir.mkdirs();
- }
- if(fileName.equals("")){
- fileName = inputFile.getOriginalFilename();
- }
- String saveFilePath = saveDir.getPath() + "/" + fileName;
- OutputStream os = new FileOutputStream( saveFilePath );
- InputStream is = inputFile.getInputStream();
- while ((len = is.read(bs)) != -1) {
- os.write(bs, 0, len);
- }
- os.close();
- is.close();
- return saveFilePath.replaceAll("\\\\", "/" );
- }
- public static boolean checkFile(InputStream inputStream){
- try {
- byte[] headBytes = new byte[3];
- inputStream.read(headBytes, 0, headBytes.length);
- String headStr = bytesToHexString(headBytes).toLowerCase();
- log.info("The Head of File: "+headStr);
- // log.info("Whether the map contain the " + headStr +": " + FILE_TYPE_MAP.containsKey(headStr));
- return FILE_TYPE_MAP.containsKey(headStr);
- } catch (IOException e) {
- e.printStackTrace();
- }
- return true;
- }
- public static boolean checkExcel(InputStream inputStream){
- String headStr = getHeadStr(inputStream);
- log.info("The Head of File: "+headStr);
- String name = FILE_TYPE_MAP.get(headStr);
- if (name == null || (!name.contains("doc")&&(!name.contains("wps"))))
- return false;
- return true;
- }
- public static String getHeadStr(InputStream inputStream){
- try {
- byte[] headBytes = new byte[3];
- inputStream.read(headBytes, 0, headBytes.length);
- return bytesToHexString(headBytes).toLowerCase();
- } catch (IOException e) {
- throw new RuntimeException("读取文件头出错!", e);
- }
- }
- private static String bytesToHexString(byte[] src) {
- StringBuilder builder = new StringBuilder();
- if (src == null || src.length <= 0) {
- return null;
- }
- String hv;
- for (int i = 0; i < src.length; i++) {
- // 以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式,并转换为大写
- hv = Integer.toHexString(src[i] & 0xFF).toUpperCase();
- if (hv.length() < 2) {
- builder.append(0);
- }
- builder.append(hv);
- }
- System.out.println("HexString: " + builder.toString());
- return builder.toString();
- }
- public static <T> List<T> importExcel(MultipartFile file, Integer titleRows, Integer headerRows, Class<T> pojoClass){
- if (file == null){
- return null;
- }
- ImportParams params = new ImportParams();
- params.setTitleRows(titleRows);
- params.setHeadRows(headerRows);
- List<T> list = null;
- try {
- list = ExcelImportUtil.importExcel(file.getInputStream(), pojoClass, params);
- }catch (NoSuchElementException e){
- log.info("excel文件不能为空");
- throw new RuntimeException("excel文件不能为空");
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- return list;
- }
- }
|