fix: 用硬编码MIME映射替代mime.TypeByExtension
- Alpine镜像缺少/etc/mime.types导致TypeByExtension不可靠 - 使用getContentType函数硬编码常见Web文件MIME类型 - 不再依赖系统环境,确保所有平台行为一致
This commit is contained in:
+42
-18
@@ -5,7 +5,6 @@ import (
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"log"
|
||||
"mime"
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
@@ -225,15 +224,6 @@ func startServer() {
|
||||
r := gin.Default()
|
||||
r.MaxMultipartMemory = 32 << 20
|
||||
|
||||
mime.AddExtensionType(".js", "application/javascript")
|
||||
mime.AddExtensionType(".mjs", "application/javascript")
|
||||
mime.AddExtensionType(".css", "text/css")
|
||||
mime.AddExtensionType(".html", "text/html")
|
||||
mime.AddExtensionType(".json", "application/json")
|
||||
mime.AddExtensionType(".svg", "image/svg+xml")
|
||||
mime.AddExtensionType(".woff", "font/woff")
|
||||
mime.AddExtensionType(".woff2", "font/woff2")
|
||||
|
||||
r.Use(middleware.Logger())
|
||||
r.Use(middleware.Recovery())
|
||||
r.Use(middleware.Cors())
|
||||
@@ -282,10 +272,7 @@ func setupEmbeddedFrontend(r *gin.Engine) {
|
||||
return
|
||||
}
|
||||
|
||||
contentType := mime.TypeByExtension(decodedPath)
|
||||
if contentType == "" {
|
||||
contentType = "application/octet-stream"
|
||||
}
|
||||
contentType := getContentType(decodedPath)
|
||||
|
||||
c.Header("Cache-Control", "public, max-age=31536000, immutable")
|
||||
c.Data(200, contentType, data)
|
||||
@@ -303,10 +290,7 @@ func setupEmbeddedFrontend(r *gin.Engine) {
|
||||
decodedPath = path
|
||||
}
|
||||
if data, err := fs.ReadFile(distFS, decodedPath); err == nil {
|
||||
contentType := mime.TypeByExtension(decodedPath)
|
||||
if contentType == "" {
|
||||
contentType = "application/octet-stream"
|
||||
}
|
||||
contentType := getContentType(decodedPath)
|
||||
c.Data(200, contentType, data)
|
||||
return
|
||||
}
|
||||
@@ -349,3 +333,43 @@ func getSettingString(settings map[string]interface{}, key, defaultValue string)
|
||||
}
|
||||
return defaultValue
|
||||
}
|
||||
|
||||
func getContentType(filename string) string {
|
||||
ext := strings.ToLower(filename[strings.LastIndex(filename, "."):])
|
||||
switch ext {
|
||||
case ".js", ".mjs":
|
||||
return "application/javascript; charset=utf-8"
|
||||
case ".css":
|
||||
return "text/css; charset=utf-8"
|
||||
case ".html":
|
||||
return "text/html; charset=utf-8"
|
||||
case ".json":
|
||||
return "application/json; charset=utf-8"
|
||||
case ".png":
|
||||
return "image/png"
|
||||
case ".jpg", ".jpeg":
|
||||
return "image/jpeg"
|
||||
case ".gif":
|
||||
return "image/gif"
|
||||
case ".svg":
|
||||
return "image/svg+xml"
|
||||
case ".ico":
|
||||
return "image/x-icon"
|
||||
case ".webp":
|
||||
return "image/webp"
|
||||
case ".woff":
|
||||
return "font/woff"
|
||||
case ".woff2":
|
||||
return "font/woff2"
|
||||
case ".ttf":
|
||||
return "font/ttf"
|
||||
case ".eot":
|
||||
return "application/vnd.ms-fontobject"
|
||||
case ".xml":
|
||||
return "application/xml"
|
||||
case ".txt":
|
||||
return "text/plain; charset=utf-8"
|
||||
default:
|
||||
return "application/octet-stream"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user