fix: 修复知识库附件上传乱码问题

This commit is contained in:
xiaoen
2026-03-17 18:57:30 +08:00
parent a50375616e
commit 556cc93f14
2 changed files with 63 additions and 1 deletions

View File

@@ -0,0 +1,61 @@
package org.ruoyi.common.core.utils.file;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: xiaoen
* @Description: Content-Type 映射工具
* @Date: Created in 18:50 2026/3/17
*/
public class ContentTypeUtil {
private static final Map<String, String> CONTENT_TYPE_MAP = new HashMap<>();
static {
// 文本文件
CONTENT_TYPE_MAP.put(".txt", "text/plain; charset=UTF-8");
CONTENT_TYPE_MAP.put(".html", "text/html; charset=UTF-8");
CONTENT_TYPE_MAP.put(".htm", "text/html; charset=UTF-8");
CONTENT_TYPE_MAP.put(".css", "text/css; charset=UTF-8");
CONTENT_TYPE_MAP.put(".js", "application/javascript; charset=UTF-8");
CONTENT_TYPE_MAP.put(".json", "application/json; charset=UTF-8");
CONTENT_TYPE_MAP.put(".xml", "application/xml; charset=UTF-8");
CONTENT_TYPE_MAP.put(".csv", "text/csv; charset=UTF-8");
// 图片文件
CONTENT_TYPE_MAP.put(".jpg", "image/jpeg");
CONTENT_TYPE_MAP.put(".jpeg", "image/jpeg");
CONTENT_TYPE_MAP.put(".png", "image/png");
CONTENT_TYPE_MAP.put(".gif", "image/gif");
CONTENT_TYPE_MAP.put(".bmp", "image/bmp");
CONTENT_TYPE_MAP.put(".webp", "image/webp");
CONTENT_TYPE_MAP.put(".svg", "image/svg+xml");
// 应用文件
CONTENT_TYPE_MAP.put(".pdf", "application/pdf");
CONTENT_TYPE_MAP.put(".doc", "application/msword");
CONTENT_TYPE_MAP.put(".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
CONTENT_TYPE_MAP.put(".xls", "application/vnd.ms-excel");
CONTENT_TYPE_MAP.put(".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
CONTENT_TYPE_MAP.put(".ppt", "application/vnd.ms-powerpoint");
CONTENT_TYPE_MAP.put(".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
// 其他
CONTENT_TYPE_MAP.put(".mp3", "audio/mpeg");
CONTENT_TYPE_MAP.put(".mp4", "video/mp4");
CONTENT_TYPE_MAP.put(".zip", "application/zip");
CONTENT_TYPE_MAP.put(".rar", "application/x-rar-compressed");
}
/**
* 根据后缀返回对应的 content-type
* @param suffix
* @param defaultContentType
* @return
*/
public static String getContentType(String suffix, String defaultContentType) {
String contentType = CONTENT_TYPE_MAP.get(suffix.toLowerCase());
return contentType != null ? contentType : defaultContentType;
}
}

View File

@@ -17,6 +17,7 @@ import org.ruoyi.common.core.utils.MapstructUtils;
import org.ruoyi.common.core.utils.SpringUtils;
import org.ruoyi.common.core.utils.StreamUtils;
import org.ruoyi.common.core.utils.StringUtils;
import org.ruoyi.common.core.utils.file.ContentTypeUtil;
import org.ruoyi.common.core.utils.file.FileUtils;
import org.ruoyi.common.json.utils.JsonUtils;
import org.ruoyi.common.mybatis.core.page.PageQuery;
@@ -218,7 +219,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
OssClient storage = OssFactory.instance();
UploadResult uploadResult;
try {
uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType());
uploadResult = storage.uploadSuffix(file.getBytes(), suffix, ContentTypeUtil.getContentType(suffix, file.getContentType()));
} catch (IOException e) {
throw new ServiceException(e.getMessage());
}