修复文件上传的问题。
This commit is contained in:
		@@ -45,37 +45,42 @@ public class ImportBIDataController
 | 
			
		||||
        ReportType type = request.getReportType();
 | 
			
		||||
        boolean hasCaption = request.isHasCaption();
 | 
			
		||||
        int sheetIndex = request.getSheetIndex();
 | 
			
		||||
        int importedCount = 0;
 | 
			
		||||
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            if ( type == ReportType.TelsalerAttachingRateReport )
 | 
			
		||||
            {
 | 
			
		||||
                importBITelsalerAttachingRate( filePath, sheetIndex, hasCaption );
 | 
			
		||||
                importedCount = importBITelsalerAttachingRate( filePath, sheetIndex, hasCaption );
 | 
			
		||||
            }
 | 
			
		||||
            else if ( type == ReportType.TelsalerRenewalRateReport )
 | 
			
		||||
            {
 | 
			
		||||
                importBITeslsalerRenewalRate( filePath, sheetIndex, hasCaption );
 | 
			
		||||
                importedCount = importBITeslsalerRenewalRate( filePath, sheetIndex, hasCaption );
 | 
			
		||||
            }
 | 
			
		||||
            else if ( type == ReportType.DepartmentAttachingRenewalRateReport )
 | 
			
		||||
            {
 | 
			
		||||
                importBIDepartmentArchievement( filePath, sheetIndex, hasCaption );
 | 
			
		||||
                importedCount = importBIDepartmentArchievement( filePath, sheetIndex, hasCaption );
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            response.setImportedCount(importedCount);
 | 
			
		||||
            response.setSuccess(true);
 | 
			
		||||
            response.setMessage("导入成功");
 | 
			
		||||
        }
 | 
			
		||||
        catch ( IOException error )
 | 
			
		||||
        {
 | 
			
		||||
            String message = "加载文件错误,错误消息:" + error.getMessage();
 | 
			
		||||
            response.setSuccess( false );
 | 
			
		||||
            response.setMessage( message );
 | 
			
		||||
            
 | 
			
		||||
            logger.error(message, error);
 | 
			
		||||
 | 
			
		||||
            logger.error( message, error );
 | 
			
		||||
        }
 | 
			
		||||
        catch ( InvalidFormatException error )
 | 
			
		||||
        {
 | 
			
		||||
            String message = "Excel文件格式错误,错误消息:" + error.getMessage();
 | 
			
		||||
            response.setSuccess( false );
 | 
			
		||||
            response.setMessage( message );
 | 
			
		||||
            
 | 
			
		||||
            logger.error(message, error);
 | 
			
		||||
 | 
			
		||||
            logger.error( message, error );
 | 
			
		||||
        }
 | 
			
		||||
        catch ( PersistenceException error )
 | 
			
		||||
        {
 | 
			
		||||
@@ -83,17 +88,18 @@ public class ImportBIDataController
 | 
			
		||||
            response.setSuccess( false );
 | 
			
		||||
            response.setMessage( message );
 | 
			
		||||
 | 
			
		||||
            logger.error(message, error);
 | 
			
		||||
            logger.error( message, error );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return response;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private static void importBITelsalerAttachingRate( String filePath, int sheetIndex,
 | 
			
		||||
    private static int importBITelsalerAttachingRate( String filePath, int sheetIndex,
 | 
			
		||||
            boolean hasCaption ) throws PersistenceException, IOException, InvalidFormatException
 | 
			
		||||
    {
 | 
			
		||||
        SqlSession session = null;
 | 
			
		||||
        int importedCount = 0;
 | 
			
		||||
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
@@ -102,7 +108,7 @@ public class ImportBIDataController
 | 
			
		||||
                            sheetIndex, hasCaption );
 | 
			
		||||
 | 
			
		||||
            session = MybatisUtils.getSqlSessionBatch();
 | 
			
		||||
            ImportBIArchievementDataMapper mapper = 
 | 
			
		||||
            ImportBIArchievementDataMapper mapper =
 | 
			
		||||
                    session.getMapper( ImportBIArchievementDataMapper.class );
 | 
			
		||||
 | 
			
		||||
            mapper.cleanTelsalerAttachingRateData();
 | 
			
		||||
@@ -110,6 +116,7 @@ public class ImportBIDataController
 | 
			
		||||
            for ( BITelsalerAttachingRateRecord record : records )
 | 
			
		||||
            {
 | 
			
		||||
                mapper.insertTelsalerAttachingRateDataToDB( record );
 | 
			
		||||
                importedCount++;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            session.commit();
 | 
			
		||||
@@ -123,14 +130,17 @@ public class ImportBIDataController
 | 
			
		||||
 | 
			
		||||
            throw error;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return importedCount;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void importBITeslsalerRenewalRate( String filePath, int sheetIndex,
 | 
			
		||||
    private static int importBITeslsalerRenewalRate( String filePath, int sheetIndex,
 | 
			
		||||
            boolean hasCaption ) throws PersistenceException, IOException, InvalidFormatException
 | 
			
		||||
    {
 | 
			
		||||
        ArrayList<BITelsalerRenewalRateRecord> records = null;
 | 
			
		||||
        SqlSession session = null;
 | 
			
		||||
        ImportBIArchievementDataMapper mapper = null;
 | 
			
		||||
        int importedCount = 0;
 | 
			
		||||
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
@@ -146,6 +156,7 @@ public class ImportBIDataController
 | 
			
		||||
            for ( BITelsalerRenewalRateRecord record : records )
 | 
			
		||||
            {
 | 
			
		||||
                mapper.insertTelsalerRenewalRateDataToDB( record );
 | 
			
		||||
                importedCount++;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            session.commit();
 | 
			
		||||
@@ -159,14 +170,17 @@ public class ImportBIDataController
 | 
			
		||||
 | 
			
		||||
            throw error;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return importedCount;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private static void importBIDepartmentArchievement( String filePath, int sheetIndex,
 | 
			
		||||
    private static int importBIDepartmentArchievement( String filePath, int sheetIndex,
 | 
			
		||||
            boolean hasCaption ) throws PersistenceException, IOException, InvalidFormatException
 | 
			
		||||
    {
 | 
			
		||||
        ArrayList<BIDepartmentArchievementRecord> records = null;
 | 
			
		||||
        SqlSession session = null;
 | 
			
		||||
        ImportBIArchievementDataMapper mapper = null;
 | 
			
		||||
        int importedCount = 0;
 | 
			
		||||
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
@@ -180,6 +194,7 @@ public class ImportBIDataController
 | 
			
		||||
            for ( BIDepartmentArchievementRecord record : records )
 | 
			
		||||
            {
 | 
			
		||||
                mapper.insertDepartmentAttachingRenewalRateDataToDB( record );
 | 
			
		||||
                importedCount++;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            session.commit();
 | 
			
		||||
@@ -191,5 +206,7 @@ public class ImportBIDataController
 | 
			
		||||
                session.rollback();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return importedCount;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,8 @@
 | 
			
		||||
 * @Author: Kane
 | 
			
		||||
 * @Date: 2023-01-22 23:11:26
 | 
			
		||||
 * @LastEditors: Kane
 | 
			
		||||
 * @LastEditTime: 2023-10-06 01:48:39
 | 
			
		||||
 * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/FileUpload/FileUpload.java
 | 
			
		||||
 * @LastEditTime: 2023-10-16 10:51:36
 | 
			
		||||
 * @FilePath: /desktop_archievement_backend/src/main/java/com/cpic/xim/web/controllers/fileupload/FileUpload.java
 | 
			
		||||
 * @Description: 用于接受上传文件的Controller。
 | 
			
		||||
 * 
 | 
			
		||||
 * Copyright (c) ${2022} by Kane, All Rights Reserved. 
 | 
			
		||||
@@ -12,6 +12,9 @@
 | 
			
		||||
package com.cpic.xim.web.controllers.fileupload;
 | 
			
		||||
 | 
			
		||||
import java.io.File;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.time.LocalDateTime;
 | 
			
		||||
import java.time.ZoneOffset;
 | 
			
		||||
import java.util.Vector;
 | 
			
		||||
import javax.servlet.http.HttpServletRequest;
 | 
			
		||||
import org.springframework.stereotype.Controller;
 | 
			
		||||
@@ -39,45 +42,46 @@ public class FileUpload
 | 
			
		||||
    @RequestMapping( path = "/file-upload.do" )
 | 
			
		||||
    @ResponseBody
 | 
			
		||||
    public FileUploadResult getUploadFile( @RequestParam( "task-name" ) String taskName,
 | 
			
		||||
            @RequestParam( "files" ) MultipartFile[] files, HttpServletRequest request )
 | 
			
		||||
            @RequestParam( "files" ) MultipartFile file, HttpServletRequest request )
 | 
			
		||||
    {
 | 
			
		||||
        // session id用来创建临时目录,避免重复
 | 
			
		||||
        String sessionID = request.getSession().getId();
 | 
			
		||||
        FileUploadResult result = new FileUploadResult();
 | 
			
		||||
        Vector<String> fileNames = new Vector<String>();
 | 
			
		||||
        int fileCount = files.length;
 | 
			
		||||
 | 
			
		||||
        // 防御验证
 | 
			
		||||
        if ( files.length == 0 )
 | 
			
		||||
        {
 | 
			
		||||
            result.setSuccess( false );
 | 
			
		||||
            result.setMessage( "此接口用于上传文件!" );
 | 
			
		||||
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        result.setSuccess( true );
 | 
			
		||||
        result.setMessage( "上传成功!" );
 | 
			
		||||
 | 
			
		||||
        for ( MultipartFile file : files )
 | 
			
		||||
        // 检查文件长度,如果为0则跳过
 | 
			
		||||
        if ( file.isEmpty() )
 | 
			
		||||
        {
 | 
			
		||||
            result.setSuccess( false );
 | 
			
		||||
            result.setMessage( "不允许上传空文件。" );
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            // 检查文件长度,如果为0则跳过
 | 
			
		||||
            if ( file.isEmpty() )
 | 
			
		||||
            {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // 保存文件到临时目录
 | 
			
		||||
            Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
 | 
			
		||||
            String filePath =
 | 
			
		||||
                    request.getServletContext().getRealPath( "/temp/upload/" + sessionID );
 | 
			
		||||
            String fileName = file.getOriginalFilename();
 | 
			
		||||
            String fileName = String.valueOf(milliSecond) + file.getOriginalFilename();
 | 
			
		||||
            File destFile = new File( filePath, fileName );
 | 
			
		||||
 | 
			
		||||
            // 把上传文件的绝对路径保存,返回给前端
 | 
			
		||||
            fileNames.add( destFile.getAbsolutePath() );
 | 
			
		||||
        }
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                file.transferTo( destFile );
 | 
			
		||||
                // 把上传文件的绝对路径保存,返回给前端
 | 
			
		||||
                fileNames.add( destFile.getAbsolutePath() );
 | 
			
		||||
 | 
			
		||||
        result.setFileList( fileNames );
 | 
			
		||||
                result.setSuccess(true);
 | 
			
		||||
                result.setMessage("上传成功");
 | 
			
		||||
                result.setFileList(fileNames);
 | 
			
		||||
            }
 | 
			
		||||
            catch ( IOException error )
 | 
			
		||||
            {
 | 
			
		||||
                result.setSuccess(false);
 | 
			
		||||
                result.setMessage("上传失败,原因:" + error.getMessage());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user