diff --git a/magic-api-servlet/magic-api-servlet-jakarta/src/main/java/org/ssssssss/magicapi/servlet/jakarta/MagicJakartaHttpServletResponse.java b/magic-api-servlet/magic-api-servlet-jakarta/src/main/java/org/ssssssss/magicapi/servlet/jakarta/MagicJakartaHttpServletResponse.java index 1db0d517fa8be8761da116d9d506613925be3b1e..116b0ba07f04a4702a94d2b1971b425cedb61543 100644 --- a/magic-api-servlet/magic-api-servlet-jakarta/src/main/java/org/ssssssss/magicapi/servlet/jakarta/MagicJakartaHttpServletResponse.java +++ b/magic-api-servlet/magic-api-servlet-jakarta/src/main/java/org/ssssssss/magicapi/servlet/jakarta/MagicJakartaHttpServletResponse.java @@ -42,6 +42,16 @@ public class MagicJakartaHttpServletResponse implements MagicHttpServletResponse response.addCookie(cookie.getCookie()); } + @Override + public void setContentType(String contentType) { + response.setContentType(contentType); + } + + @Override + public void setCharacterEncoding(String characterEncoding) { + response.setCharacterEncoding(characterEncoding); + } + @Override public OutputStream getOutputStream() throws IOException { return response.getOutputStream(); diff --git a/magic-api-servlet/magic-api-servlet-javaee/src/main/java/org/ssssssss/magicapi/servlet/javaee/MagicJavaEEHttpServletResponse.java b/magic-api-servlet/magic-api-servlet-javaee/src/main/java/org/ssssssss/magicapi/servlet/javaee/MagicJavaEEHttpServletResponse.java index 6861dcb04ad5a1636efed98a9aea9c27a578fb71..fb3ed4cd000183b18cd800e80753ef08f4bfe2bc 100644 --- a/magic-api-servlet/magic-api-servlet-javaee/src/main/java/org/ssssssss/magicapi/servlet/javaee/MagicJavaEEHttpServletResponse.java +++ b/magic-api-servlet/magic-api-servlet-javaee/src/main/java/org/ssssssss/magicapi/servlet/javaee/MagicJavaEEHttpServletResponse.java @@ -42,6 +42,16 @@ public class MagicJavaEEHttpServletResponse implements MagicHttpServletResponse response.addCookie(cookie.getCookie()); } + @Override + public void setContentType(String contentType) { + response.setContentType(contentType); + } + + @Override + public void setCharacterEncoding(String characterEncoding) { + response.setCharacterEncoding(characterEncoding); + } + @Override public OutputStream getOutputStream() throws IOException { return response.getOutputStream(); diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/core/servlet/MagicHttpServletResponse.java b/magic-api/src/main/java/org/ssssssss/magicapi/core/servlet/MagicHttpServletResponse.java index fd719f7581eecbaa82511458bcbc316d007e8ffa..f775cc866590aab993a91273f3b5d2274581dcf7 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/core/servlet/MagicHttpServletResponse.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/core/servlet/MagicHttpServletResponse.java @@ -14,6 +14,10 @@ public interface MagicHttpServletResponse { public void addCookie(MagicCookie cookie); + public void setContentType(String contentType); + + public void setCharacterEncoding(String characterEncoding); + public OutputStream getOutputStream() throws IOException; public Collection getHeaderNames(); diff --git a/magic-api/src/main/java/org/ssssssss/magicapi/core/web/MagicWorkbenchController.java b/magic-api/src/main/java/org/ssssssss/magicapi/core/web/MagicWorkbenchController.java index 5f02c403b51480326901fb7eb334448d8c56ce19..03001b4e7b71da126f8c04b8823c021f987577a2 100644 --- a/magic-api/src/main/java/org/ssssssss/magicapi/core/web/MagicWorkbenchController.java +++ b/magic-api/src/main/java/org/ssssssss/magicapi/core/web/MagicWorkbenchController.java @@ -5,8 +5,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.ClassPathResource; import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; import org.springframework.util.ResourceUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -22,7 +20,6 @@ import org.ssssssss.magicapi.core.service.MagicAPIService; import org.ssssssss.magicapi.core.servlet.MagicHttpServletRequest; import org.ssssssss.magicapi.core.servlet.MagicHttpServletResponse; import org.ssssssss.magicapi.modules.db.SQLModule; -import org.ssssssss.magicapi.modules.servlet.ResponseModule; import org.ssssssss.magicapi.utils.ClassScanner; import org.ssssssss.magicapi.utils.IoUtils; import org.ssssssss.magicapi.utils.SignUtils; @@ -33,10 +30,8 @@ import org.ssssssss.script.ScriptClass; import org.ssssssss.script.parsing.Span; import org.ssssssss.script.parsing.Tokenizer; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; +import java.io.*; +import java.net.URLEncoder; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; @@ -256,37 +251,45 @@ public class MagicWorkbenchController extends MagicController implements MagicEx } @RequestMapping(value = "/config-js") - @ResponseBody @Valid(requireLogin = false) - public ResponseEntity configJs() { - ResponseEntity.BodyBuilder responseBuilder = ResponseEntity.ok().contentType(MediaType.parseMediaType("application/javascript")); + public void configJs(MagicHttpServletResponse response) throws IOException { + response.setContentType("application/javascript"); + response.setCharacterEncoding("UTF-8"); + byte[] bytes = "var MAGIC_EDITOR_CONFIG = {}".getBytes(); if (configuration.getEditorConfig() != null) { try { String path = configuration.getEditorConfig(); if (path.startsWith(ResourceUtils.CLASSPATH_URL_PREFIX)) { path = path.substring(ResourceUtils.CLASSPATH_URL_PREFIX.length()); - return responseBuilder.body(IoUtils.bytes(new ClassPathResource(path).getInputStream())); + bytes = IoUtils.bytes(new ClassPathResource(path).getInputStream()); } File file = ResourceUtils.getFile(configuration.getEditorConfig()); - return responseBuilder.body(Files.readAllBytes(Paths.get(file.toURI()))); + bytes = Files.readAllBytes(Paths.get(file.toURI())); } catch (IOException e) { logger.warn("读取编辑器配置文件{}失败", configuration.getEditorConfig()); } } - return responseBuilder.body("var MAGIC_EDITOR_CONFIG = {}".getBytes()); + try (OutputStream stream = response.getOutputStream()) { + stream.write(bytes); + stream.flush(); + } } @RequestMapping("/download") @Valid(authorization = Authorization.DOWNLOAD) - @ResponseBody - public ResponseEntity download(String groupId, @RequestBody(required = false) List resources, MagicHttpServletRequest request) throws IOException { + public void download(String groupId, @RequestBody(required = false) List resources, MagicHttpServletRequest request, MagicHttpServletResponse response) throws IOException { isTrue(allowVisit(request, Authorization.DOWNLOAD), PERMISSION_INVALID); + response.setContentType("application/octet-stream"); ByteArrayOutputStream os = new ByteArrayOutputStream(); magicAPIService.download(groupId, resources, os); + String filename = "magic-api-all.zip"; if (StringUtils.isBlank(groupId)) { - return ResponseModule.download(os.toByteArray(), "magic-api-group.zip"); - } else { - return ResponseModule.download(os.toByteArray(), "magic-api-all.zip"); + filename = "magic-api-group.zip"; + } + response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8")); + try (OutputStream stream = response.getOutputStream()) { + stream.write(os.toByteArray()); + stream.flush(); } }