springboot多文件上传

    public ResultInfo saveCheckPoint(List<MultipartFile> testCaseFile, String questionId, Double questionScore) {
        ResultInfo resultInfo = new ResultInfo();
        System.out.println("文件个数:" + testCaseFile.size());
//        判断文件个数是否为偶数
//        是偶数则继续,不是则提示错误
        if (testCaseFile.size() % 2 == 0) {
//            设置数组存放文件名
            String[][] names = new String[testCaseFile.size()][2];
//            创建数组存放匹配文件
            MultipartFile[][] multipartFiles = new MultipartFile[testCaseFile.size() / 2 + 1][2];
//            遍历获得的文件
            for (int i = 0; i < testCaseFile.size(); i++) {
//                获取文件名
                String fileName = testCaseFile.get(i).getOriginalFilename();
                System.out.println("文件名:" + fileName);
//                截取文件名
                String[] splitName = fileName.split("-");
//                放入数组中
//                存放文件类型
                names[i][0] = splitName[0];
                System.out.println("类型:" + names[i][0]);
//                存放文件后缀
                names[i][1] = splitName[1].substring(0, splitName[1].indexOf('.'));
                System.out.println("后缀:" + names[i][1]);
            }
//            遍历数组名,看是匹配
//            m:input的后缀,n:output的后缀
            int m = 0;
            int n = 0;
            for (int i = 0; i < testCaseFile.size(); i++) {
                if (names[i][0].equals("input"))
                    m = m + Integer.parseInt(names[i][1]);
                else if (names[i][0].equals("output"))
                    n = n + Integer.parseInt(names[i][1]);
            }
//            判断输入用例和输出用例是否相同
            if (m == n) {
//                创建用例类
                CheckPoint checkPoint = new CheckPoint();
//                循环
                for (int i = 0; i < testCaseFile.size(); i++) {
                    if (names[i][0].equals("input")) {
//                        输入文件
                        System.out.println(names[i][1]);
                        multipartFiles[Integer.parseInt(names[i][1])][0] = testCaseFile.get(i);
                    } else {
//                        输出文件
                        multipartFiles[Integer.parseInt(names[i][1])][1] = testCaseFile.get(i);
                    }
                }
                for (int i = 1; i < testCaseFile.size() / 2 + 1; i++) {

                    try {
//                            创建输入文件读入流
                        InputStream inputStream = multipartFiles[i][0].getInputStream();
                        InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
                        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//                            读并放到String中
                        String input = null;
                        String is;
                        while ((is = bufferedReader.readLine()) != null) {
                            if (input == null) {
                                input = is;
                            } else
                                input = input + "\r\n" + is;
                        }
                        checkPoint.setInput(input);
                        bufferedReader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

//                        创建输出文件读入流

                    try {
                        InputStream inputStream1 = multipartFiles[i][1].getInputStream();
                        InputStreamReader inputStreamReader1 = new InputStreamReader(inputStream1, "UTF-8");
                        BufferedReader bufferedReader1 = new BufferedReader(inputStreamReader1);
//                            读并放到String中
                        String output = null;
                        String os;
                        while ((os = bufferedReader1.readLine()) != null) {
                            if (output == null) {
                                output = os;
                            } else
                                output = output + "\r\n" + os;
                        }
                        checkPoint.setOutput(output);
                        bufferedReader1.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    checkPoint.setCpId(UUIDUtils.getUUID());
                    checkPoint.setQuestionId(questionId);
                    checkPoint.setItemScore(questionScore / testCaseFile.size() * 2);
                    //                保存
                    checkPointDao.save(checkPoint);
                    resultInfo.setResultCode(ResultInfo.RESULT_CODE_SUCCESS);
                }

            } else {
                resultInfo.setResultCode(ResultInfo.RESULT_CODE_ERROR);
//            测试用例不匹配
                resultInfo.setResultMessage(propertiesUtils.getTestCaseError());
            }

        } else {
            resultInfo.setResultCode(ResultInfo.RESULT_CODE_ERROR);
//            测试用例不匹配
            resultInfo.setResultMessage(propertiesUtils.getTestCaseError());
        }

        return resultInfo;
    }
}

猜你喜欢

转载自blog.csdn.net/zyp1376308302/article/details/81161535