Skip to content

Commit 0eabdf8

Browse files
authored
fix: modify resource download (#258)
* fix: modify resource download
1 parent f2dc77f commit 0eabdf8

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

base/src/main/java/com/tinyengine/it/common/utils/ImageThumbnailGenerator.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,26 @@ public static String extractCleanBase64(String input) {
215215
return trimmed;
216216
}
217217

218+
/**
219+
* 从 Base64 数据中提取 MIME 类型
220+
* @param base64Data 完整的 Base64 数据(包含 data:image/png;base64, 前缀)
221+
* @return 提取到的 MIME 类型,如 "image/png", "image/svg+xml"
222+
*/
223+
public static String extractContentType(String base64Data) {
224+
if (base64Data == null || !base64Data.startsWith("data:")) {
225+
throw new IllegalArgumentException("Invalid Base64 data format");
226+
}
227+
228+
Pattern pattern = Pattern.compile("^data:([^;]+);");
229+
Matcher matcher = pattern.matcher(base64Data);
230+
231+
if (matcher.find()) {
232+
return matcher.group(1);
233+
}
234+
235+
throw new IllegalArgumentException("Cannot extract content type from Base64 data");
236+
}
237+
218238
/**
219239
* MIME类型转格式
220240
*/

base/src/main/java/com/tinyengine/it/controller/ResourceController.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -270,14 +270,13 @@ public void getResource(@RequestParam("data") String data, HttpServletResponse r
270270
String cleanBase64 = ImageThumbnailGenerator.extractCleanBase64(base64Data);
271271
byte[] imageBytes = Base64.getDecoder().decode(cleanBase64);
272272

273-
String detectedType = ImageThumbnailGenerator.detectFormatFromBase64(base64Data);
274-
String fileExtension = detectedType.equals("jpeg") ? "jpg" : detectedType;
273+
String detectedType = ImageThumbnailGenerator.extractContentType(base64Data);
275274

276275
String fileName = useOriginal ? resource.getName() : "thumbnail_" + resource.getName();
277276
// URL编码文件名
278277
String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8)
279278
.replace("+", "%20");
280-
response.setContentType("image/" + detectedType);
279+
response.setContentType(detectedType);
281280

282281
// 只使用 filename* 格式,避免中文字符直接出现在header中
283282
response.setHeader("Content-Disposition",

0 commit comments

Comments
 (0)