档案管理流程,文件上传,文件解析流程

news2025/1/1 1:27:54

文件上传

先简单说下文件上传的步骤吧
控制层简单左下转发

@PostMapping("uploadAndParsing")
public ResponseResult uploadAndParsing(@RequestParam("file") MultipartFile file){
        try {
            String accessToken = Header.getAuthorization(request.getHeader("Authorization"));
            FileData fileData = fileDataService.uploadAndParsing(file.getOriginalFilename(), file.getBytes(),
                    file.getContentType(), file.getSize(),accessToken);
            return ResponseResult.success(fileData);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ResponseResult.failure();
    }

通过文件MultipartFile,来获取文件名file.getOriginalFilename(),文件流file.getBytes(),文件类型file.getContentType(),文件大小file.getSize()

实现层

所做的操作就是将文件的详细信息返回:

String suffixPoint = fileName.substring(fileName.lastIndexOf("."));
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
String name = fileName.substring(0, fileName.indexOf(suffixPoint));

获得文件名的前缀后缀,简单不多说

FileData fileData = new FileData();
fileData.setFileSuffix(suffix);
HashMap<String, Object> map = fileUtil.formatFileSize(size);
fileData.setFileSize(BigDecimal.valueOf(Double.valueOf(String.valueOf(map.get("value")))));
fileData.setUnit(String.valueOf(map.get("unit")));

FileData为返回的文件详细信息的对象,formatFileSize() 方法为将文件的大小转换为指定的单位:简单看下这个方法吧

public HashMap<String, Object> formatFileSize(long size) {
        DecimalFormat df = new DecimalFormat("#.00");
        HashMap<String, Object> hashMap = new HashMap<>();
        String fileSizeString = "";
        // String wrongSize = "0B";
        if (size == 0) {
            hashMap.put("value", 0);
            hashMap.put("unit", "B");
            return hashMap;
        }
        if (size < 1024) {
            hashMap.put("value", df.format((double) size));
            hashMap.put("unit", "B");
            //           fileSizeString = df.format((double) size) + "B";
        } else if (size < 1048576) {
            hashMap.put("value", df.format((double) size / 1024));
            hashMap.put("unit", "KB");
//            fileSizeString = df.format((double) size / 1024) + "KB";
        } else if (size < 1073741824) {
            hashMap.put("value", df.format((double) size / 1048576));
            hashMap.put("unit", "MB");
//            fileSizeString = df.format((double) size / 1024) + "MB";
        } else if (size < 1099511627776L) {
            hashMap.put("value", df.format((double) size / 1073741824));
            hashMap.put("unit", "GB");
//            fileSizeString = df.format((double) size / 1073741824) + "GB";
        } else if (size < 1125899906842624L) {
            hashMap.put("value", df.format((double) size / 1099511627776L));
            hashMap.put("unit", "TB");
//            fileSizeString = df.format((double) size / 1099511627776L) + "TB";
        } else {
            hashMap.put("value", df.format((double) size / 1125899906842624L));
            hashMap.put("unit", "PB");
//            fileSizeString = df.format((double) size / 1125899906842624L) + "PB";
        }
        return hashMap;
    }

之后进行文件的上传:

MinioUploadDto minioUploadDto = minioService.upload(fileName, bytes, contentType);

上传的技术公司使用的技术为MinIO,将文件存储在服务器的桶中在这里插入图片描述
对于上传的工具类可以给大家看一下:

public class MinioServiceImpl implements IMinioService {

    @Autowired
    private MinioClient minioClient;

    @Value("${minio.endpoint}")
    private String ENDPOINT;
    @Value("${minio.bucketName}")
    private String BUCKET_NAME;
    @Value("${minio.accessKey}")
    private String ACCESS_KEY;
    @Value("${minio.secretKey}")
    private String SECRET_KEY;

    @Override
    public MinioUploadDto upload(String fileName, byte[] bytes, String contentType) {
        //创建一个MinIO的Java客户端
        InputStream inputStream = new ByteArrayInputStream(bytes);
        try {
            String filename = fileName;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            // 设置存储对象名称
            String objectName = sdf.format(new Date()) + "/" + SnowflakeIdWorker.generateOpenId()+"/" +filename;
            // 使用putObject上传一个文件到存储桶中
            try {
                minioClient.putObject(PutObjectArgs.builder()
                        .bucket(BUCKET_NAME)
                        .object(objectName)
                        .stream(inputStream, inputStream.available(), -1)
                        .contentType(contentType)
                        .build()
                );
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            log.info("文件上传成功!");
            MinioUploadDto minioUploadDto = new MinioUploadDto();
            minioUploadDto.setName(filename);
            minioUploadDto.setUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName);
            //minioUploadDto.setUrl(minioClient.getObjectUrl(BUCKET_NAME,objectName));
            return minioUploadDto;
        } catch (Exception e) {
            delete(fileName);
        }

        return null;
    }

    @Override
    public MinioUploadDto upload(String fileName, InputStream inputStream, String contentType) {
        try {
            String filename = fileName;
            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
            // 设置存储对象名称
            String objectName = sdf.format(new Date()) + "/" + SnowflakeIdWorker.generateOpenId()+"/" +filename;
            // 使用putObject上传一个文件到存储桶中
            try {
                minioClient.putObject(PutObjectArgs.builder()
                        .bucket(BUCKET_NAME)
                        .object(objectName)
                        .stream(inputStream, inputStream.available(), -1)
                        .contentType(contentType)
                        .build()
                );
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (inputStream != null) {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            log.info("文件上传成功!");
            MinioUploadDto minioUploadDto = new MinioUploadDto();
            minioUploadDto.setName(filename);
            minioUploadDto.setUrl(ENDPOINT + "/" + BUCKET_NAME + "/" + objectName);
            //minioUploadDto.setUrl(minioClient.getObjectUrl(BUCKET_NAME,objectName));
            return minioUploadDto;
        } catch (Exception e) {
            delete(fileName);
        }

        return null;
    }

    @Override
    public boolean delete(String objectName) {
        try {
            minioClient.removeObject(RemoveObjectArgs.builder()
                    .bucket(BUCKET_NAME)
                    .object(objectName)
                    .build());
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}

上传完之后返回文件的位移名字和url:

代码简单,自己理解哈~。
上传之后后面进行文件类型解析等操作:

if (minioUploadDto == null) {
            return null;
        } else {
            fileData.setFileUrl(minioUploadDto.getUrl());
            //获取一个文件流
            InputStream inputStream = new ByteArrayInputStream(bytes);
            String text = "";
            int pages = 0;
            try {
                if (suffix.equals("doc")) {
                    HashMap<String, Object> textFromDoc = fileUtil.getTextFromDoc(inputStream);
                    text = String.valueOf(textFromDoc.get("text"));
                    pages = Integer.parseInt(String.valueOf(textFromDoc.get("pageCount")));
                } else if (suffix.equals("docx")) {
                    HashMap<String, Object> textFromDocx = fileUtil.getTextFromDocx(inputStream);
                    text = String.valueOf(textFromDocx.get("text"));
                    pages = Integer.parseInt(String.valueOf(textFromDocx.get("pageCount")));
                } else if (suffix.equals("pdf")) {
                    HashMap<String, Object> textFromPDF = fileUtil.getTextFromPDF(inputStream);
                    text = String.valueOf(textFromPDF.get("text"));
                    pages = Integer.parseInt(String.valueOf(textFromPDF.get("pageCount")));
                } else if (suffix.equals("ppt")) {
                    HashMap<String, Object> textFromPPT = fileUtil.getTextFromPPT(inputStream);
                    text = String.valueOf(textFromPPT.get("text"));
                    pages = Integer.parseInt(String.valueOf(textFromPPT.get("pageCount")));
                } else if (suffix.equals("pptx")) {
                    HashMap<String, Object> textFromPPTX = fileUtil.getTextFromPPTX(inputStream);
                    text = String.valueOf(textFromPPTX.get("text"));
                    pages = Integer.parseInt(String.valueOf(textFromPPTX.get("pageCount")));
                } else if (suffix.equals("xls")) {
                    HashMap<String, Object> textFromxls = fileUtil.getTextFromxls(inputStream);
                    text = String.valueOf(textFromxls.get("text"));
                    pages = Integer.parseInt(String.valueOf(textFromxls.get("pageCount")));
                } else if (suffix.equals("xlsx")) {
                    HashMap<String, Object> textFromxlsx = fileUtil.getTextFromxlsx(inputStream);
                    text = String.valueOf(textFromxlsx.get("text"));
                    pages = Integer.parseInt(String.valueOf(textFromxlsx.get("pageCount")));
                } else if (suffix.equals("txt")) {
                    text = fileUtil.getTextFromTxt(inputStream);
                }
                LoginInfo info = tokenService.get(token);
                fileData.setPages(pages);
                setFileData(null, fileData, info);
                this.saveOrUpdate(fileData);
                //不管是否解析了文本都需要保存到es 保存到es
                saveEs(fileData, text, info);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

解析:获取到文件的后缀之后根据文件的后缀去读取文件:getTextFromDoc(inputStream)
此类方法就是解析文件的详细内容,doc、docx、ppt、等文件的类型。获得文件的内容及页数
工具类列一下:


import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.ocr.v1.OcrClient;
import com.huaweicloud.sdk.ocr.v1.model.GeneralTableRequestBody;
import com.huaweicloud.sdk.ocr.v1.model.RecognizeGeneralTableRequest;
import com.huaweicloud.sdk.ocr.v1.model.RecognizeGeneralTableResponse;
import com.huaweicloud.sdk.ocr.v1.region.OcrRegion;
import com.youming.shuiku.archive.api.IMinioService;
import lombok.RequiredArgsConstructor;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.poi.hslf.extractor.PowerPointExtractor;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.openxmlformats.schemas.drawingml.x2006.main.CTRegularTextRun;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextBody;
import org.openxmlformats.schemas.drawingml.x2006.main.CTTextParagraph;
import org.openxmlformats.schemas.presentationml.x2006.main.CTGroupShape;
import org.openxmlformats.schemas.presentationml.x2006.main.CTShape;
import org.openxmlformats.schemas.presentationml.x2006.main.CTSlide;
import org.springframework.stereotype.Component;

import javax.crypto.interfaces.PBEKey;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;

@Component
@RequiredArgsConstructor
public class FileUtil {


    private final IMinioService minioService;

    /**
     * 读取doc文件
     *
     * @param filePath
     * @throws Exception
     */
    public HashMap<String,Object> getTextFromDoc(InputStream filePath) throws Exception {
        StringBuilder sb = new StringBuilder();
        HashMap<String,Object> map=new HashMap<>();
        HWPFDocument doc = new HWPFDocument(filePath);
        int pageCount = doc.getSummaryInformation().getPageCount();
        Range rang = doc.getRange();
        sb.append(rang.text());
        filePath.close();
        map.put("text",sb.toString());
        map.put("pageCount",pageCount);
        return map;

    }

    /**
     * 读取docx文件
     *
     * @param filePath
     * @throws IOException
     */
    public HashMap<String,Object> getTextFromDocx(InputStream filePath) throws IOException {
        XWPFDocument doc = new XWPFDocument(filePath);
        int pageCount = doc.getProperties().getExtendedProperties().getUnderlyingProperties().getPages();
        XWPFWordExtractor extractor = new XWPFWordExtractor(doc);
        String text = extractor.getText();
        filePath.close();
        HashMap<String,Object> map=new HashMap<>();
        map.put("text",text);
        map.put("pageCount",pageCount);
        return map;
    }

    /**
     * 读取pdf文件
     *
     * @param filePath
     * @throws IOException
     */
    public HashMap<String,Object> getTextFromPDF(InputStream filePath) throws IOException {
        PDDocument document = PDDocument.load(filePath);
        int pageCount =  document.getPages().getCount();
        document.getClass();
        //使用PDFTextStripper 工具
        PDFTextStripper tStripper = new PDFTextStripper();
        //设置文本排序,有规则输出
        tStripper.setSortByPosition(true);
        //获取所有文字信息
        String text = tStripper.getText(document);
        document.close();
        HashMap<String,Object> map=new HashMap<>();
        map.put("text",text);
        map.put("pageCount",pageCount);
        return map;
    }

    public String getTextFromImg(byte[] bytes) throws IOException, ExecutionException, InterruptedException, TesseractException {
        PDDocument document = PDDocument.load(bytes);
        //创建PDF渲染器
        PDFRenderer renderer = new PDFRenderer(document);
        int pageSize = document.getNumberOfPages();
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < pageSize; i++) {
            //将PDF的每一页渲染成一张图片
            BufferedImage image = renderer.renderImage(i);
            Tesseract tesseract = new Tesseract();
            tesseract.setDatapath("D:/tesseract-ocr/tessdata");
            tesseract.setLanguage("chi_sim");
            System.out.println(tesseract.doOCR(image));
            builder.append(tesseract.doOCR(image));
            //  images.add(output.toByteArray());
        }
        //对接华为云
//        PDDocument document = PDDocument.load(bytes);
//        //创建PDF渲染器
//        PDFRenderer renderer = new PDFRenderer(document);
//        int pageSize = document.getNumberOfPages();
//        List<byte[]> images = new ArrayList<>();
//        for (int i = 0; i < pageSize; i++) {
//            ByteArrayOutputStream output = new ByteArrayOutputStream();
//            //将PDF的每一页渲染成一张图片
//            BufferedImage image = renderer.renderImage(i);
//            ImageIO.write(image, "png", output);
//            images.add(output.toByteArray());
//        }
//        String ak = "R.......T";
//        String sk = "R.........................................z";
//        for (byte[] image : images) {
//            String encode = Base64UtilData.encode(image);
//            ICredential auth = new BasicCredentials()
//                    .withAk(ak)
//                    .withSk(sk);
//
//            OcrClient client = OcrClient.newBuilder()
//                    .withCredential(auth)
//                    .withRegion(OcrRegion.valueOf("cn-east-3"))
//                    .build();
//            RecognizeGeneralTableRequest request = new RecognizeGeneralTableRequest();
//            GeneralTableRequestBody body = new GeneralTableRequestBody();
//            body.withImage(encode);
//            request.withBody(body);
//            try {
//                RecognizeGeneralTableResponse response = client.recognizeGeneralTable(request);
//                System.out.println(response.toString());
//            } catch (ConnectionException e) {
//                e.printStackTrace();
//            } catch (RequestTimeoutException e) {
//                e.printStackTrace();
//            } catch (ServiceResponseException e) {
//                e.printStackTrace();
//                System.out.println(e.getHttpStatusCode());
//                System.out.println(e.getErrorCode());
//                System.out.println(e.getErrorMsg());
//            }
//        }
        return null;
    }


    /**
     * 读取ppt文件
     *
     * @param filePath
     * @throws IOException
     */
    public HashMap<String, Object> getTextFromPPT(InputStream filePath) throws IOException {
        PowerPointExtractor extractor = new PowerPointExtractor(filePath);
        int pageCount = extractor.getSummaryInformation().getPageCount();
        String content = extractor.getText();
        extractor.close();
        HashMap<String,Object> map=new HashMap<>();
        map.put("text",content);
        map.put("pageCount",pageCount);
        return map;
    }

    /**
     * 读取pptx文件
     *
     * @param filePath
     * @throws IOException
     */
    public HashMap<String,Object> getTextFromPPTX(InputStream filePath) throws IOException {
        String resultString = null;
        StringBuilder sb = new StringBuilder();
        int pageNum =0;
        try {
            XMLSlideShow xmlSlideShow = new XMLSlideShow(filePath);
            pageNum = xmlSlideShow.getSlides().size();
            List<XSLFSlide> slides = xmlSlideShow.getSlides();
            for (XSLFSlide slide : slides) {
                CTSlide rawSlide = slide.getXmlObject();
                CTGroupShape gs = rawSlide.getCSld().getSpTree();
                CTShape[] shapes = gs.getSpArray();
                for (CTShape shape : shapes) {
                    CTTextBody tb = shape.getTxBody();
                    if (null == tb) {
                        continue;
                    }
                    CTTextParagraph[] paras = tb.getPArray();
                    for (CTTextParagraph textParagraph : paras) {
                        CTRegularTextRun[] textRuns = textParagraph.getRArray();
                        for (CTRegularTextRun textRun : textRuns) {
                            sb.append(textRun.getT());
                        }
                    }
                }
            }
            resultString = sb.toString();
            xmlSlideShow.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        HashMap<String,Object> map=new HashMap<>();
        map.put("text",resultString);
        map.put("pageCount",pageNum);
        return map;
    }

    /**
     * 读取xls
     *
     * @param filePath
     * @throws IOException
     */
    public HashMap<String,Object> getTextFromxls(InputStream filePath) throws IOException {
        StringBuilder content = new StringBuilder();
        HSSFWorkbook workbook = new HSSFWorkbook(filePath);
        Integer sheetNums = workbook.getNumberOfSheets();
        if (sheetNums > 0) {
            sheetNums = workbook.getSheetAt(0).getRowBreaks().length + 1;
        }
        for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {
            HSSFSheet sheet = workbook.getSheetAt(sheetIndex);
            for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
                HSSFRow row = sheet.getRow(rowIndex);
                if (row == null) {
                    continue;
                }
                for (int cellnum = 0; cellnum < row.getLastCellNum(); cellnum++) {
                    HSSFCell cell = row.getCell(cellnum);
                    //设置单元格类型
                    cell.setCellType(CellType.STRING);
                    if (cell != null) {
                        content.append(cell.getRichStringCellValue().getString() + " ");
                    }

                }
            }

        }
        workbook.close();
        HashMap<String,Object> map=new HashMap<>();
        map.put("text",content.toString());
        map.put("pageCount",sheetNums);
        return map;

    }

    /**
     * 用来读取xlsx文件
     *
     * @param filePath
     * @throws IOException
     */
    public HashMap<String,Object> getTextFromxlsx(InputStream filePath) throws IOException {
        StringBuilder content = new StringBuilder();
        XSSFWorkbook workbook = new XSSFWorkbook(filePath);
        Integer sheetNums = workbook.getNumberOfSheets();
        if (sheetNums > 0) {
            sheetNums = workbook.getSheetAt(0).getRowBreaks().length + 1;
        }
        for (int sheet = 0; sheet < workbook.getNumberOfSheets(); sheet++) {
            if (null != workbook.getSheetAt(sheet)) {
                XSSFSheet aSheet = workbook.getSheetAt(sheet);
                for (int row = 0; row <= aSheet.getLastRowNum(); row++) {
                    if (null != aSheet.getRow(row)) {
                        XSSFRow aRow = aSheet.getRow(row);
                        for (int cell = 0; cell < aRow.getLastCellNum(); cell++) {
                            if (null != aRow.getCell(cell)) {
                                XSSFCell aCell = aRow.getCell(cell);
                                if (convertCell(aCell).length() > 0) {
                                    content.append(convertCell(aCell));
                                }
                            }
                            content.append(" ");
                        }
                    }
                }
            }
        }
        workbook.close();
        HashMap<String,Object> map=new HashMap<>();
        map.put("text",content.toString());
        map.put("pageCount",sheetNums);
        return map;

    }

    public String getTextFromTxt(InputStream filePath) throws Exception {
        StringBuilder content = new StringBuilder();
        try {
            // 3.读取数据
            byte[] bytes = new byte[filePath.available()];// 修改了这里
            int len;// 记录每次读取的字节的个数
            while ((len = filePath.read(bytes)) != -1) {
                String str = new String(bytes, 0, len);
                content.append(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 4.关闭输入流
            if (filePath != null) {
                filePath.close();
            }
        }
        return content.toString();
    }

    /**
     * 将Object对象转byte数组
     * @param obj byte数组的object对象
     * @return
     */
    public static byte[] toByteArray(Object obj) {
        byte[] bytes = null;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            ObjectOutputStream oos = new ObjectOutputStream(bos);
            oos.writeObject(obj);
            oos.flush();
            bytes = bos.toByteArray ();
            oos.close();
            bos.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return bytes;
    }
    public static Map<String,Object> getFileByte(URL url) throws IOException {
        HttpURLConnection conn=(HttpURLConnection) url.openConnection();
        //以Post方式提交表单,默认get方式
        conn.setRequestMethod("GET");
        conn.setDoInput(true);
        conn.setDoOutput(true);
        // post方式不能使用缓存
        conn.setUseCaches(false);
        //连接指定的资源
        conn.connect();
        //获取网络输入流
        InputStream inStream=conn.getInputStream();
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
        int size = conn.getContentLength();
        //new 个 inStream 能支持到 最大的数组
        byte[] buffer;
        int ch;
        while ((ch = inStream.read()) != -1) {
            swapStream.write(ch);
        }
        buffer = swapStream.toByteArray();

        inStream.close();
        Map<String,Object> map=new HashMap<>();
        map.put("size",size);
        map.put("bytes",buffer);
        return map;
    }

    private String convertCell(Cell cell) {
        NumberFormat formater = NumberFormat.getInstance();
        formater.setGroupingUsed(false);
        String cellValue = "";
        if (cell == null) {
            return cellValue;
        }

        switch (cell.getCellType()) {
            case HSSFCell.CELL_TYPE_NUMERIC:
                cellValue = formater.format(cell.getNumericCellValue());
                break;
            case HSSFCell.CELL_TYPE_STRING:
                cellValue = cell.getStringCellValue();
                break;
            case HSSFCell.CELL_TYPE_BLANK:
                cellValue = cell.getStringCellValue();
                break;
            case HSSFCell.CELL_TYPE_BOOLEAN:
                cellValue = Boolean.valueOf(cell.getBooleanCellValue()).toString();
                break;
            case HSSFCell.CELL_TYPE_ERROR:
                cellValue = String.valueOf(cell.getErrorCellValue());
                break;
            default:
                cellValue = "";
        }
        return cellValue.trim();
    }


    public HashMap<String, Object> formatFileSize(long size) {
        DecimalFormat df = new DecimalFormat("#.00");
        HashMap<String, Object> hashMap = new HashMap<>();
        String fileSizeString = "";
        // String wrongSize = "0B";
        if (size == 0) {
            hashMap.put("value", 0);
            hashMap.put("unit", "B");
            return hashMap;
        }
        if (size < 1024) {
            hashMap.put("value", df.format((double) size));
            hashMap.put("unit", "B");
            //           fileSizeString = df.format((double) size) + "B";
        } else if (size < 1048576) {
            hashMap.put("value", df.format((double) size / 1024));
            hashMap.put("unit", "KB");
//            fileSizeString = df.format((double) size / 1024) + "KB";
        } else if (size < 1073741824) {
            hashMap.put("value", df.format((double) size / 1048576));
            hashMap.put("unit", "MB");
//            fileSizeString = df.format((double) size / 1024) + "MB";
        } else if (size < 1099511627776L) {
            hashMap.put("value", df.format((double) size / 1073741824));
            hashMap.put("unit", "GB");
//            fileSizeString = df.format((double) size / 1073741824) + "GB";
        } else if (size < 1125899906842624L) {
            hashMap.put("value", df.format((double) size / 1099511627776L));
            hashMap.put("unit", "TB");
//            fileSizeString = df.format((double) size / 1099511627776L) + "TB";
        } else {
            hashMap.put("value", df.format((double) size / 1125899906842624L));
            hashMap.put("unit", "PB");
//            fileSizeString = df.format((double) size / 1125899906842624L) + "PB";
        }
        return hashMap;
    }


}

返回得到文件的内容及页数
在这里插入图片描述

最后一步就是保存到ES代码

//不管是否解析了文本都需要保存到es 保存到es
saveEs(fileData, text, info);

保存ES

具体保存代码:

/**
     * 同步保存到es
     *
     * @param fileData 文件对象
     * @param text     解析后得到的内容
     */
    public void saveEs(FileData fileData, String text, LoginInfo info) {
        FileDataEsVO fileDataEsVO = new FileDataEsVO();
        BeanUtils.copyProperties(fileData, fileDataEsVO);
        fileDataEsVO.setText(text);
        if (fileData.getCreatePeople() != null) {
            fileDataEsVO.setCreatePeopleName(info.getName());
        }
        if (fileData.getUpdatePeople() != null) {
            fileDataEsVO.setUpdatePeopleName(info.getName());
        }
        if (fileData.getGroupId() != null) {
            fileDataEsVO.setTitle(fileTitleService.getById(fileData.getGroupId()).getTitle());
        }
        //聚合词条
        List<String> suggestion = new ArrayList<>();
        if (StringUtils.isNotBlank(text)) {
            suggestion.add(text);
        }
        if(StringUtils.isNotBlank(fileData.getFileName())){
            suggestion.add(fileData.getFileName());
        }
        fileDataEsVO.setSuggestion(suggestion);
        String jsonString = JSON.toJSONString(fileDataEsVO);
        IndexRequest request = new IndexRequest("file_data").id(fileDataEsVO.getId().toString());
        request.source(jsonString, XContentType.JSON);
        try {
            client.index(request, RequestOptions.DEFAULT);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/559913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022年度互联网平均薪资出炉~

近期&#xff0c;国家统计局发布2022年平均工资数据&#xff0c;互联网行业薪资再次成为大家关注的焦点。 在2022年分行业门类分岗位就业人员年平均工资中&#xff0c;信息传输、软件和信息技术服务业的薪资遥遥领先其他行业&#xff0c;为全国平均薪资水平的 1.78 倍&#xf…

H-buildX项目(学习笔记1.0)

记录一下自己的学习过程。 首先&#xff0c;下载H-buildX软件&#xff0c;直接度娘下载即可。 以前一直用的是vscode&#xff0c;这次做网上的项目用到了这个。 打开 就是这样的界面&#xff0c;首先介绍几个常用的功能 右上角的预览&#xff0c;也就是运行你的Vue项目的界面效…

2023华为OD机试(A卷+B卷)(Java C++ Python JS)真题目录 + 考点 + 通过率

文章目录 &#x1f680;前言华为OD刷题列表&#xff0c;每天十题&#xff0c;刷出算法新高度&#xff0c;刷出人生新际遇&#x1f530;刷题列表&#xff1a;华为OD机试真题&#xff08;Java C Python JS&#xff09; &#x1f680;其他华为OD机试题清单 &#x1f4dd;最后作者&…

【最新整理】一起看看86 个 ChatGPT 插件

今天我们来看看这86个插件都是做什么的&#xff1f; Shimmer&#xff1a;跟踪膳食并获得更健康生活方式的见解 World News&#xff1a;总结新闻头条 Bohita&#xff1a;用您能描述的任何图像制作服装 Portfolio Pilot&#xff1a;您的 AI 投资指南&#xff1a;投资组合评估…

跟着我学 AI丨五分钟了解人工智能的发展史

随着 ChatGPT 火出圈&#xff0c;又接二连三出现了文心一言、Midjourney、FireFly 等创新性的 AI 产品&#xff0c;互联网掀起的 AI 风暴已经席卷了全球各个角落。AI 究竟为什么这么强大&#xff1f;从什么时候开始冒出来的呢&#xff1f;今天我就带大家认识一下 AI 的发展史。…

软件设计师考试——面向对象设计模式分类

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、面向对象设计——设计模式的分类一、创建型模式二、结构型模式三、行为型模式 二、历年真题——面向对象设计模式分类2009上半年2009下半年2010上半年2010下半年…

深度学习神经网络学习笔记-多模态方向-12-DBpedia: A Nucleus for a Web of Open Data

摘要 DBpedia是一个社区努力从维基百科中提取结构化信息&#xff0c;并使这些信息在网络上可用。DBpedia允许您对来自维基百科的数据集提出复杂的查询&#xff0c;并将网络上的其他数据集链接到维基百科数据。我们描述了DBpedia数据集的提取&#xff0c;以及产生的信息如何在网…

img标签-访问绝对路径图片出现403的解决办法

img标签-访问绝对路径图片出现403的解决办法 图片请求显示403打不开 403是防止盗链的错误&#xff08;这种设计&#xff0c;是api厂商正常保证自己的服务器不被刷流量&#xff09; 方法一&#xff1a;使用no-referrer 这种方案不仅针对图片的防盗链,还可以是其他标签. 在前端…

「谷云科技」RestCloud新一代(智能)全域数据集成平台发布

5月18日&#xff0c;RestCloud在其成立六周年的当天&#xff0c;发布了“新一代&#xff08;智能&#xff09;全域数据集成平台”。 根据业内专家、学者和从业者通过实践和研究总结&#xff0c;数据集成大体可以分为4个阶段&#xff1a;早期阶段、数据集成软件工具、企业级数据…

chat gpt 中国镜像网站

随着人工智能技术的快速发展&#xff0c;自然语言处理对人们日常生活和工作中的应用变得越来越普及&#xff0c;其中机器翻译、自动问答、智能客服和语音识别等技术尤其受到欢迎。Chat GPT模型是其中一种被广泛使用的技术&#xff0c;由OpenAI开发&#xff0c;使用了Transforme…

【TCP】状态转换

TCP状态转换 这个图N多人都知道&#xff0c;它排除和定位网络或系统故障时大有帮助&#xff0c;但是怎样牢牢地将这张图刻在脑中呢&#xff1f;那么你就一定要对这张图的每一个状态&#xff0c;及转换的过程有深刻的认识&#xff0c;不能只停留在一知半解之中。下面对这张图的…

Blender 建模风扇(UV贴图、图像纹理、环境纹理、伽玛、Cycles渲染)

目录 1. 风扇建模1.1 风扇外壳1.2 风扇内壳1.3 前盖1.4 后盖1.5 风扇叶1.6 扇叶连接部分1.7 其他细节 2. UV、材质、渲染2.1 材质属性&#xff1a;图像纹理2.2 UV贴图2.3 基础材质2.4 伽玛值2.5 世界属性&#xff1a;环境纹理2.6 背景平面2.7 灯光、摄像机2.8 渲染属性2.9 渲染…

COCO-Annotator安装和使用 [非常详细]

COCO-Annotator安装和使用 1.所需环境 安装COCO-Annotator前需要先安装Docker&#xff0c;有需要可以参考这篇文章&#xff1a;Windows下安装docker 2.安装 在要安装的目录下进入cmd输入命令 git clone https://github.com/jsbroks/coco-annotatorcd命令进入文件夹 cd co…

DICOM通信协议标准解析

DICOM通信协议的特点和内容概述 DICOM标准的主要特点 DICOM标准的主要特点 是一种上层网络协议 只有在建立“关联”之后&#xff0c;才能进行DICOM命令和数据的发送和接收。 DICOM编码的特点 标准定义了26中内部数据类型像素数据的编码支持JPEG的图像压缩图像可以包含缩略…

《元宇宙之声》:Meta MCDH

为下一代建造未来就绪的校园。 在本期节目中&#xff0c;我们访问了香港路德会马锦明慈善基金马陈端喜纪念中学&#xff08;MCDH&#xff09;的陈婉玲校长&#xff0c;讨论了 MCDH 改革教育的愿景&#xff0c;通过培养年轻的创作者&#xff0c;让他们迈出进入 The Sandbox 的第…

【谷粒商城之秒杀服务】

本笔记内容为尚硅谷谷粒商城秒杀服务部分 目录 一、秒杀业务的介绍 秒杀设计 秒杀流程 二、搭建秒杀服务环境 1、秒杀服务后台管理系统 2、搭建秒杀服务环境 二、定时任务 1、cron 表达式 2、测试 三、商品上架 1、远程查询秒杀的活动以及关联的商品信息 2、在R…

「一本通 1.2 练习 3」灯泡

题目描述 相比 w i l d l e o p a r d wildleopard wildleopard 的家&#xff0c;他的弟弟 m i l d l e o p a r d mildleopard mildleopard 比较穷。他的房子是狭窄的而且在他的房间里面仅有一个灯泡。每天晚上&#xff0c;他徘徊在自己狭小的房子里&#xff0c;思考如何赚…

探索Kotlin 1.8.20新特性

探索Kotlin 1.8.20新特性 Kotlin 1.8.20已经发布&#xff0c;我们将探索一些新功能和改进。 我们将仅涵盖新的语言功能和标准库更新。请参考参考资料部分以了解此版本的完整详情。 语言更新 Enum 类entries函数 为什么需要这个函数&#xff1f; values() - 返回数组&#x…

电商数仓建模案例

目录 一、数据仓库分层规划二、数据仓库构建流程2.1 数据调研2.2 明确数据域2.3 构建业务总线矩阵2.4 明确统计指标2.4 维度模型设计2.5 汇总模型设计 三、数仓建模之ODS层3.1 日志表3.1.1 日志表表结构 3.2 业务表3.2.1 业务表表结构 四、数仓开发之DIM层4.1 商品维度表4.2 优…

The Sandbox 与 Biconomy 合作,达成交易里程碑

双方将继续合作利用 Polygon Labs 来降低用户的成本和 The Sandbox 的碳足迹。 我们团队继续推动更好的整体项目生态系统的可持续性&#xff0c;同时沿途的里程碑向我们展示这些进展产生的影响。我们很高兴地宣布&#xff0c;自从在 Biconomy.io 的帮助下首次在 Polygon 上部署…