From 33d1b6266dff72d4f348deb7c5cdb58ced638ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E6=B5=B7?= <10402852@qq.com> Date: Fri, 20 Sep 2024 16:03:28 +0800 Subject: [PATCH] 'commit' --- .../微服务架构教育项目组成1.txt | 43 ++++++ .../微服务架构教育项目组成2.txt | 43 ++++++ .../微服务架构教育项目组成3.txt | 43 ++++++ .../Global/Controller/GlobalController.java | 25 ++++ .../com/dsideal/gw/Handler/RouterHandler.java | 122 ++++++++++-------- .../微服务架构教育项目组成.txt | 43 ++++++ .../微服务架构教育项目组成1.txt | 43 ++++++ .../微服务架构教育项目组成2.txt | 43 ++++++ .../微服务架构教育项目组成3.txt | 43 ++++++ .../微服务架构教育项目组成4.txt | 43 ++++++ 10 files changed, 435 insertions(+), 56 deletions(-) create mode 100644 ds-base/WebRoot/upload/微服务架构教育项目组成1.txt create mode 100644 ds-base/WebRoot/upload/微服务架构教育项目组成2.txt create mode 100644 ds-base/WebRoot/upload/微服务架构教育项目组成3.txt create mode 100644 ds-gw/src/main/webapp/upload/微服务架构教育项目组成.txt create mode 100644 ds-gw/src/main/webapp/upload/微服务架构教育项目组成1.txt create mode 100644 ds-gw/src/main/webapp/upload/微服务架构教育项目组成2.txt create mode 100644 ds-gw/src/main/webapp/upload/微服务架构教育项目组成3.txt create mode 100644 ds-gw/src/main/webapp/upload/微服务架构教育项目组成4.txt diff --git a/ds-base/WebRoot/upload/微服务架构教育项目组成1.txt b/ds-base/WebRoot/upload/微服务架构教育项目组成1.txt new file mode 100644 index 00000000..b34a337b --- /dev/null +++ b/ds-base/WebRoot/upload/微服务架构教育项目组成1.txt @@ -0,0 +1,43 @@ +技术上采用微服务架构,支持K8S,JFinal+JDK21+Mysql5.7+Docker+Pika+Vue+UniApp构成技术栈。 +目标: +1、基础功能一次开发,以后项目迭代可以随时拉取镜像就可以有支撑服务,无需重复开发。 +2、高性能,高并发,横向可扩展 +3、WEB端,手机端健全,各种技术全面得到实践应用 + + +模块 +一、基础支撑系统 +0、学段表 +1、科目 +2、支持多套章节目录结构 scheme+structure +3、支持知识点目录结构 + +二、资源库 +1、上传资源,上传到支持S3协议的Minio服务或者华为云、阿里云存储 +2、支持文件在线预览功能,需要整合下面的服务 +3、支持系统提供的资源和自己上传的资源,共享、上级等概念暂不支持 + +https://file.kkview.cn/ +https://gitee.com/kekingcn/file-online-preview + +三、题库 +1、录入试题 +暂不支持导入试题 + +2、支持单选,判断,多选,子母题(比如一个题干,多个小题),简答 + +3、支持根据试题级卷,包括手动组卷,自动级卷 + + +四、考试系统 +1、发布考试 +2、在规定的时间内答题 +2、导入考生名单,生成准考证,生成用户名和密码 +3、考生高并发答题,最终系统输出成绩,导出成绩 +4、针对题目的得分率进行分析 + +五、调查问卷系统 +1、发布调查问卷 +2、在规定的时间内答题 +3、针对题目的得分率进行分析 +4、输出问卷结果报告 \ No newline at end of file diff --git a/ds-base/WebRoot/upload/微服务架构教育项目组成2.txt b/ds-base/WebRoot/upload/微服务架构教育项目组成2.txt new file mode 100644 index 00000000..b34a337b --- /dev/null +++ b/ds-base/WebRoot/upload/微服务架构教育项目组成2.txt @@ -0,0 +1,43 @@ +技术上采用微服务架构,支持K8S,JFinal+JDK21+Mysql5.7+Docker+Pika+Vue+UniApp构成技术栈。 +目标: +1、基础功能一次开发,以后项目迭代可以随时拉取镜像就可以有支撑服务,无需重复开发。 +2、高性能,高并发,横向可扩展 +3、WEB端,手机端健全,各种技术全面得到实践应用 + + +模块 +一、基础支撑系统 +0、学段表 +1、科目 +2、支持多套章节目录结构 scheme+structure +3、支持知识点目录结构 + +二、资源库 +1、上传资源,上传到支持S3协议的Minio服务或者华为云、阿里云存储 +2、支持文件在线预览功能,需要整合下面的服务 +3、支持系统提供的资源和自己上传的资源,共享、上级等概念暂不支持 + +https://file.kkview.cn/ +https://gitee.com/kekingcn/file-online-preview + +三、题库 +1、录入试题 +暂不支持导入试题 + +2、支持单选,判断,多选,子母题(比如一个题干,多个小题),简答 + +3、支持根据试题级卷,包括手动组卷,自动级卷 + + +四、考试系统 +1、发布考试 +2、在规定的时间内答题 +2、导入考生名单,生成准考证,生成用户名和密码 +3、考生高并发答题,最终系统输出成绩,导出成绩 +4、针对题目的得分率进行分析 + +五、调查问卷系统 +1、发布调查问卷 +2、在规定的时间内答题 +3、针对题目的得分率进行分析 +4、输出问卷结果报告 \ No newline at end of file diff --git a/ds-base/WebRoot/upload/微服务架构教育项目组成3.txt b/ds-base/WebRoot/upload/微服务架构教育项目组成3.txt new file mode 100644 index 00000000..b34a337b --- /dev/null +++ b/ds-base/WebRoot/upload/微服务架构教育项目组成3.txt @@ -0,0 +1,43 @@ +技术上采用微服务架构,支持K8S,JFinal+JDK21+Mysql5.7+Docker+Pika+Vue+UniApp构成技术栈。 +目标: +1、基础功能一次开发,以后项目迭代可以随时拉取镜像就可以有支撑服务,无需重复开发。 +2、高性能,高并发,横向可扩展 +3、WEB端,手机端健全,各种技术全面得到实践应用 + + +模块 +一、基础支撑系统 +0、学段表 +1、科目 +2、支持多套章节目录结构 scheme+structure +3、支持知识点目录结构 + +二、资源库 +1、上传资源,上传到支持S3协议的Minio服务或者华为云、阿里云存储 +2、支持文件在线预览功能,需要整合下面的服务 +3、支持系统提供的资源和自己上传的资源,共享、上级等概念暂不支持 + +https://file.kkview.cn/ +https://gitee.com/kekingcn/file-online-preview + +三、题库 +1、录入试题 +暂不支持导入试题 + +2、支持单选,判断,多选,子母题(比如一个题干,多个小题),简答 + +3、支持根据试题级卷,包括手动组卷,自动级卷 + + +四、考试系统 +1、发布考试 +2、在规定的时间内答题 +2、导入考生名单,生成准考证,生成用户名和密码 +3、考生高并发答题,最终系统输出成绩,导出成绩 +4、针对题目的得分率进行分析 + +五、调查问卷系统 +1、发布调查问卷 +2、在规定的时间内答题 +3、针对题目的得分率进行分析 +4、输出问卷结果报告 \ No newline at end of file diff --git a/ds-base/src/main/java/com/dsideal/base/Global/Controller/GlobalController.java b/ds-base/src/main/java/com/dsideal/base/Global/Controller/GlobalController.java index 4295def2..0fe89eb6 100644 --- a/ds-base/src/main/java/com/dsideal/base/Global/Controller/GlobalController.java +++ b/ds-base/src/main/java/com/dsideal/base/Global/Controller/GlobalController.java @@ -10,9 +10,11 @@ import com.jfinal.ext.interceptor.GET; import com.jfinal.ext.interceptor.POST; import com.jfinal.plugin.activerecord.Page; import com.jfinal.plugin.activerecord.Record; +import com.jfinal.upload.UploadFile; import org.apache.commons.lang.StringUtils; import org.bouncycastle.util.encoders.Base64; +import java.io.File; import java.util.List; @SuppressWarnings("unchecked") @@ -210,4 +212,27 @@ public class GlobalController extends Controller { public void testPost(int a) { renderJson(CommonUtil.returnMessageJson(true, "保存成功!a=" + a)); } + + @Before({POST.class}) + public void testUpload() { + System.out.println(getRequest().getContentType()); + UploadFile uploadFile = getFile("file");//parameterName对应jsp页面中的 + + if (uploadFile != null) { + // 获取文件的原始名称 + String originalFileName = uploadFile.getOriginalFileName(); + // 指定文件保存的路径,可以是相对路径或绝对路径 + String savePath = "c://" + originalFileName; + // 构造 File 对象 + File saveFile = new File(savePath); + // 确保保存路径的目录存在 + if (!saveFile.getParentFile().exists()) { + saveFile.getParentFile().mkdirs(); + } + // 保存文件 + uploadFile.getFile().renameTo(saveFile); + String fileName = uploadFile.getFileName(); + renderJson(CommonUtil.returnMessageJson(true, fileName + "保存成功!")); + } + } } \ No newline at end of file diff --git a/ds-gw/src/main/java/com/dsideal/gw/Handler/RouterHandler.java b/ds-gw/src/main/java/com/dsideal/gw/Handler/RouterHandler.java index bd471799..32532d71 100644 --- a/ds-gw/src/main/java/com/dsideal/gw/Handler/RouterHandler.java +++ b/ds-gw/src/main/java/com/dsideal/gw/Handler/RouterHandler.java @@ -4,6 +4,8 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.dsideal.gw.GwApplication; import com.jfinal.handler.Handler; +import com.jfinal.upload.MultipartRequest; +import com.jfinal.upload.UploadFile; import okhttp3.*; import javax.servlet.http.HttpServletRequest; @@ -11,6 +13,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; import java.io.*; import java.util.Enumeration; +import java.util.List; public class RouterHandler extends Handler { @@ -39,9 +42,12 @@ public class RouterHandler extends Handler { * GET * http://10.10.21.20:8000/dsBase/dm/getDmSchoolProperty * http://10.10.21.20:8000/dsBase/global/getGlobalList?page=1&limit=10 - *

* POST * http://10.10.21.20:8000/dsBase/global/testPost?a=100 + * 上传文件 + * http://10.10.21.20:8000/dsBase/global/testUpload + * form-data + * upfile --->参数值:选择一个文件 类型:file */ //OkHttp的实例,单例模式 @@ -122,70 +128,74 @@ public class RouterHandler extends Handler { } else { //路由到哪个微服务 String FORWARD_URL = GwApplication.routeList.get(prefix) + "/" + prefix + "/" + action; - //处理GET请求 - if (req.getMethod().equals("GET")) { - //参数:queryString - Request request; - if (queryString != null) { - request = new Request.Builder().url(FORWARD_URL + "?" + queryString).get().build(); - } else { - request = new Request.Builder().url(FORWARD_URL).get().build(); - } - try { - executeRequest(request, res); - } catch (IOException e) { - JSONObject jo = new JSONObject(); - jo.put("success", false); - jo.put("message", "请求失败!" + e); - renderJson(res, jo); - } - }//处理POST请求 - else if (req.getMethod().equals("POST")) { - RequestBody body = createRequestBody(req); - Request request; - if (queryString != null) { - request = new Request.Builder().url(FORWARD_URL + "?" + queryString).post(body).build(); - } else { - request = new Request.Builder().url(FORWARD_URL).post(body).build(); - } + //上传文件 + if (req.getContentType().startsWith("multipart/form-data")) { + // 指定文件类型 + MediaType mediaType = MediaType.parse("multipart/form-data"); + try { + MultipartRequest mp = new MultipartRequest(req); + List files = mp.getFiles(); + if (files.isEmpty()) { + JSONObject jo = new JSONObject(); + jo.put("success", false); + jo.put("message", "没有上传文件!"); + renderJson(res, jo); + isHandled[0] = true;//停止filter + return; + } + + UploadFile fu = files.getFirst(); + // 获取文件流 + RequestBody requestBody = RequestBody.create(fu.getFile(), mediaType); + // 构建MultipartBody + MultipartBody body = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", fu.getFileName(), requestBody) + .build(); + + // 构建Request + Request request = new Request.Builder() + .url(FORWARD_URL) + .post(body) + .build(); executeRequest(request, res); - } catch (IOException e) { + } catch (Exception e) { JSONObject jo = new JSONObject(); jo.put("success", false); jo.put("message", "请求失败!" + e); renderJson(res, jo); } - } else //上传文件 - if (req.getContentType().startsWith("multipart/form-data")) { - // 指定文件类型 - MediaType mediaType = MediaType.parse("multipart/form-data"); - + } else + //处理GET请求 + if (req.getMethod().equals("GET")) { + //参数:queryString + Request request; + if (queryString != null) { + request = new Request.Builder().url(FORWARD_URL + "?" + queryString).get().build(); + } else { + request = new Request.Builder().url(FORWARD_URL).get().build(); + } + try { + executeRequest(request, res); + } catch (IOException e) { + JSONObject jo = new JSONObject(); + jo.put("success", false); + jo.put("message", "请求失败!" + e); + renderJson(res, jo); + } + }//处理POST请求 + else if (req.getMethod().equals("POST")) { + RequestBody body = createRequestBody(req); + Request request; + if (queryString != null) { + request = new Request.Builder().url(FORWARD_URL + "?" + queryString).post(body).build(); + } else { + request = new Request.Builder().url(FORWARD_URL).post(body).build(); + } try { - // 获取上传的文件 - Part filePart = req.getPart("file"); - if (filePart == null) { - res.setStatus(HttpServletResponse.SC_BAD_REQUEST); - res.getWriter().write("No file uploaded"); - //停止filter - isHandled[0] = true; - return; - } - // 获取文件流 - RequestBody requestBody = RequestBody.create(convertPartToByteArray(filePart), mediaType, (int) filePart.getSize()); - // 构建MultipartBody - MultipartBody body = new MultipartBody.Builder() - .setType(MultipartBody.FORM) - .addFormDataPart("file", filePart.getSubmittedFileName(), requestBody) - .build(); - - // 构建Request - Request request = new Request.Builder() - .url(FORWARD_URL) - .post(body) - .build(); executeRequest(request, res); - } catch (Exception e) { + } catch (IOException e) { JSONObject jo = new JSONObject(); jo.put("success", false); jo.put("message", "请求失败!" + e); diff --git a/ds-gw/src/main/webapp/upload/微服务架构教育项目组成.txt b/ds-gw/src/main/webapp/upload/微服务架构教育项目组成.txt new file mode 100644 index 00000000..b34a337b --- /dev/null +++ b/ds-gw/src/main/webapp/upload/微服务架构教育项目组成.txt @@ -0,0 +1,43 @@ +技术上采用微服务架构,支持K8S,JFinal+JDK21+Mysql5.7+Docker+Pika+Vue+UniApp构成技术栈。 +目标: +1、基础功能一次开发,以后项目迭代可以随时拉取镜像就可以有支撑服务,无需重复开发。 +2、高性能,高并发,横向可扩展 +3、WEB端,手机端健全,各种技术全面得到实践应用 + + +模块 +一、基础支撑系统 +0、学段表 +1、科目 +2、支持多套章节目录结构 scheme+structure +3、支持知识点目录结构 + +二、资源库 +1、上传资源,上传到支持S3协议的Minio服务或者华为云、阿里云存储 +2、支持文件在线预览功能,需要整合下面的服务 +3、支持系统提供的资源和自己上传的资源,共享、上级等概念暂不支持 + +https://file.kkview.cn/ +https://gitee.com/kekingcn/file-online-preview + +三、题库 +1、录入试题 +暂不支持导入试题 + +2、支持单选,判断,多选,子母题(比如一个题干,多个小题),简答 + +3、支持根据试题级卷,包括手动组卷,自动级卷 + + +四、考试系统 +1、发布考试 +2、在规定的时间内答题 +2、导入考生名单,生成准考证,生成用户名和密码 +3、考生高并发答题,最终系统输出成绩,导出成绩 +4、针对题目的得分率进行分析 + +五、调查问卷系统 +1、发布调查问卷 +2、在规定的时间内答题 +3、针对题目的得分率进行分析 +4、输出问卷结果报告 \ No newline at end of file diff --git a/ds-gw/src/main/webapp/upload/微服务架构教育项目组成1.txt b/ds-gw/src/main/webapp/upload/微服务架构教育项目组成1.txt new file mode 100644 index 00000000..b34a337b --- /dev/null +++ b/ds-gw/src/main/webapp/upload/微服务架构教育项目组成1.txt @@ -0,0 +1,43 @@ +技术上采用微服务架构,支持K8S,JFinal+JDK21+Mysql5.7+Docker+Pika+Vue+UniApp构成技术栈。 +目标: +1、基础功能一次开发,以后项目迭代可以随时拉取镜像就可以有支撑服务,无需重复开发。 +2、高性能,高并发,横向可扩展 +3、WEB端,手机端健全,各种技术全面得到实践应用 + + +模块 +一、基础支撑系统 +0、学段表 +1、科目 +2、支持多套章节目录结构 scheme+structure +3、支持知识点目录结构 + +二、资源库 +1、上传资源,上传到支持S3协议的Minio服务或者华为云、阿里云存储 +2、支持文件在线预览功能,需要整合下面的服务 +3、支持系统提供的资源和自己上传的资源,共享、上级等概念暂不支持 + +https://file.kkview.cn/ +https://gitee.com/kekingcn/file-online-preview + +三、题库 +1、录入试题 +暂不支持导入试题 + +2、支持单选,判断,多选,子母题(比如一个题干,多个小题),简答 + +3、支持根据试题级卷,包括手动组卷,自动级卷 + + +四、考试系统 +1、发布考试 +2、在规定的时间内答题 +2、导入考生名单,生成准考证,生成用户名和密码 +3、考生高并发答题,最终系统输出成绩,导出成绩 +4、针对题目的得分率进行分析 + +五、调查问卷系统 +1、发布调查问卷 +2、在规定的时间内答题 +3、针对题目的得分率进行分析 +4、输出问卷结果报告 \ No newline at end of file diff --git a/ds-gw/src/main/webapp/upload/微服务架构教育项目组成2.txt b/ds-gw/src/main/webapp/upload/微服务架构教育项目组成2.txt new file mode 100644 index 00000000..b34a337b --- /dev/null +++ b/ds-gw/src/main/webapp/upload/微服务架构教育项目组成2.txt @@ -0,0 +1,43 @@ +技术上采用微服务架构,支持K8S,JFinal+JDK21+Mysql5.7+Docker+Pika+Vue+UniApp构成技术栈。 +目标: +1、基础功能一次开发,以后项目迭代可以随时拉取镜像就可以有支撑服务,无需重复开发。 +2、高性能,高并发,横向可扩展 +3、WEB端,手机端健全,各种技术全面得到实践应用 + + +模块 +一、基础支撑系统 +0、学段表 +1、科目 +2、支持多套章节目录结构 scheme+structure +3、支持知识点目录结构 + +二、资源库 +1、上传资源,上传到支持S3协议的Minio服务或者华为云、阿里云存储 +2、支持文件在线预览功能,需要整合下面的服务 +3、支持系统提供的资源和自己上传的资源,共享、上级等概念暂不支持 + +https://file.kkview.cn/ +https://gitee.com/kekingcn/file-online-preview + +三、题库 +1、录入试题 +暂不支持导入试题 + +2、支持单选,判断,多选,子母题(比如一个题干,多个小题),简答 + +3、支持根据试题级卷,包括手动组卷,自动级卷 + + +四、考试系统 +1、发布考试 +2、在规定的时间内答题 +2、导入考生名单,生成准考证,生成用户名和密码 +3、考生高并发答题,最终系统输出成绩,导出成绩 +4、针对题目的得分率进行分析 + +五、调查问卷系统 +1、发布调查问卷 +2、在规定的时间内答题 +3、针对题目的得分率进行分析 +4、输出问卷结果报告 \ No newline at end of file diff --git a/ds-gw/src/main/webapp/upload/微服务架构教育项目组成3.txt b/ds-gw/src/main/webapp/upload/微服务架构教育项目组成3.txt new file mode 100644 index 00000000..b34a337b --- /dev/null +++ b/ds-gw/src/main/webapp/upload/微服务架构教育项目组成3.txt @@ -0,0 +1,43 @@ +技术上采用微服务架构,支持K8S,JFinal+JDK21+Mysql5.7+Docker+Pika+Vue+UniApp构成技术栈。 +目标: +1、基础功能一次开发,以后项目迭代可以随时拉取镜像就可以有支撑服务,无需重复开发。 +2、高性能,高并发,横向可扩展 +3、WEB端,手机端健全,各种技术全面得到实践应用 + + +模块 +一、基础支撑系统 +0、学段表 +1、科目 +2、支持多套章节目录结构 scheme+structure +3、支持知识点目录结构 + +二、资源库 +1、上传资源,上传到支持S3协议的Minio服务或者华为云、阿里云存储 +2、支持文件在线预览功能,需要整合下面的服务 +3、支持系统提供的资源和自己上传的资源,共享、上级等概念暂不支持 + +https://file.kkview.cn/ +https://gitee.com/kekingcn/file-online-preview + +三、题库 +1、录入试题 +暂不支持导入试题 + +2、支持单选,判断,多选,子母题(比如一个题干,多个小题),简答 + +3、支持根据试题级卷,包括手动组卷,自动级卷 + + +四、考试系统 +1、发布考试 +2、在规定的时间内答题 +2、导入考生名单,生成准考证,生成用户名和密码 +3、考生高并发答题,最终系统输出成绩,导出成绩 +4、针对题目的得分率进行分析 + +五、调查问卷系统 +1、发布调查问卷 +2、在规定的时间内答题 +3、针对题目的得分率进行分析 +4、输出问卷结果报告 \ No newline at end of file diff --git a/ds-gw/src/main/webapp/upload/微服务架构教育项目组成4.txt b/ds-gw/src/main/webapp/upload/微服务架构教育项目组成4.txt new file mode 100644 index 00000000..b34a337b --- /dev/null +++ b/ds-gw/src/main/webapp/upload/微服务架构教育项目组成4.txt @@ -0,0 +1,43 @@ +技术上采用微服务架构,支持K8S,JFinal+JDK21+Mysql5.7+Docker+Pika+Vue+UniApp构成技术栈。 +目标: +1、基础功能一次开发,以后项目迭代可以随时拉取镜像就可以有支撑服务,无需重复开发。 +2、高性能,高并发,横向可扩展 +3、WEB端,手机端健全,各种技术全面得到实践应用 + + +模块 +一、基础支撑系统 +0、学段表 +1、科目 +2、支持多套章节目录结构 scheme+structure +3、支持知识点目录结构 + +二、资源库 +1、上传资源,上传到支持S3协议的Minio服务或者华为云、阿里云存储 +2、支持文件在线预览功能,需要整合下面的服务 +3、支持系统提供的资源和自己上传的资源,共享、上级等概念暂不支持 + +https://file.kkview.cn/ +https://gitee.com/kekingcn/file-online-preview + +三、题库 +1、录入试题 +暂不支持导入试题 + +2、支持单选,判断,多选,子母题(比如一个题干,多个小题),简答 + +3、支持根据试题级卷,包括手动组卷,自动级卷 + + +四、考试系统 +1、发布考试 +2、在规定的时间内答题 +2、导入考生名单,生成准考证,生成用户名和密码 +3、考生高并发答题,最终系统输出成绩,导出成绩 +4、针对题目的得分率进行分析 + +五、调查问卷系统 +1、发布调查问卷 +2、在规定的时间内答题 +3、针对题目的得分率进行分析 +4、输出问卷结果报告 \ No newline at end of file