接受文件类型 是否删除 响应类
- private void doExportFile(EngineFileType fileOutputType, Boolean deleteFile,
-                               HttpServletResponse response) throws IOException {
-         String docFileName = DOC_FILE_NAME + "_" + IdUtil.fastSimpleUUID();
-         String filePath = doExportFile(fileOutputType, docFileName);
-         String downloadFileName = DOC_FILE_NAME + fileOutputType.getFileSuffix(); //下载后的文件名
-         try {
-             // 读取,返回
-             ServletUtils.writeAttachment(response, downloadFileName, FileUtil.readBytes(filePath));
-         } finally {
-             handleDeleteFile(deleteFile, filePath);
-         }
-     }
输出文件到指定目录并返回文件路径
- /**
-      * 输出文件,返回文件路径
-      *
-      * @param fileOutputType 文件类型
-      * @param fileName       文件名, 无需 ".docx" 等文件后缀
-      * @return 生成的文件所在路径
-      */
-     private String doExportFile(EngineFileType fileOutputType, String fileName) {
-         try (HikariDataSource dataSource = buildDataSource()) {
-             // 创建 screw 的配置
-             Configuration config = Configuration.builder()
-                     .version(DOC_VERSION)  // 版本 1.0.0
-                     .description(DOC_DESCRIPTION) // 描述 文档描述
-                     .dataSource(dataSource) // 数据源 
-                     .engineConfig(buildEngineConfig(fileOutputType, fileName)) // 引擎配置
-                     .produceConfig(buildProcessConfig()) // 处理配置
-                     .build();
-             // 执行 screw,生成数据库文档
-             new DocumentationExecute(config).execute();
-             return FILE_OUTPUT_DIR + File.separator + fileName + fileOutputType.getFileSuffix();
-         }
- /**
-      * 创建 screw 的引擎配置
-      */
-     private static EngineConfig buildEngineConfig(EngineFileType fileOutputType, String docFileName) {
-         return EngineConfig.builder()
-                 .fileOutputDir(FILE_OUTPUT_DIR) // 生成文件路径
-                 .openOutputDir(false) // 打开目录
-                 .fileType(fileOutputType) // 文件类型
-                 .produceType(EngineTemplateType.velocity) // 文件类型
-                 .fileName(docFileName) // 自定义文件名称
-                 .build();
-     }
- /**
-      * 创建 screw 的处理配置,一般可忽略
-      * 指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置
-      */
-     private static ProcessConfig buildProcessConfig() {
-         return ProcessConfig.builder()
-                 .ignoreTablePrefix(Arrays.asList("QRTZ_", "ACT_")) // 忽略表前缀
-                 .build();
-     }
输出附件
- /**
-      * 返回附件
-      *
-      * @param response 响应
-      * @param filename 文件名
-      * @param content 附件内容
-      * @throws IOException
-      */
-     public static void writeAttachment(HttpServletResponse response, String filename, byte[] content) throws IOException {
-         // 设置 header 和 contentType
-         response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
-         response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
-         // 输出附件
-         IoUtil.write(response.getOutputStream(), false, content);
-     }