mirror of
https://github.com/woodchen-ink/webp_server_go.git
synced 2025-07-18 05:32:02 +08:00
调整以支持IMG_MAP
情况下的本地路径
This commit is contained in:
parent
d872d71dcb
commit
3353d014d4
@ -282,12 +282,12 @@ func parseImgMap(imgMap map[string]string) map[string]string {
|
||||
var parsedImgMap = map[string]string{}
|
||||
httpRegexpMatcher := regexp.MustCompile(HttpRegexp)
|
||||
for uriMap, uriMapTarget := range imgMap {
|
||||
if httpRegexpMatcher.Match([]byte(uriMapTarget)) || strings.HasPrefix(uriMap, "/") {
|
||||
// Valid
|
||||
if httpRegexpMatcher.Match([]byte(uriMapTarget)) || strings.HasPrefix(uriMapTarget, "./") || strings.HasPrefix(uriMapTarget, "/") {
|
||||
// Valid: remote URL or local path
|
||||
parsedImgMap[uriMap] = uriMapTarget
|
||||
} else {
|
||||
// Invalid
|
||||
log.Warnf("IMG_MAP 值'%s'与'%s'不匹配或键不以“/”开头 -已跳过", uriMapTarget, HttpRegexp)
|
||||
log.Warnf("IMG_MAP 值'%s'不是有效的远程 URL 或本地路径 -已跳过", uriMapTarget)
|
||||
}
|
||||
}
|
||||
return parsedImgMap
|
||||
|
@ -65,23 +65,50 @@ func Convert(c *fiber.Ctx) error {
|
||||
return c.SendStatus(fiber.StatusNotFound)
|
||||
}
|
||||
|
||||
// 设置目标主机信息
|
||||
targetUrl, _ := url.Parse(matchedTarget)
|
||||
targetHostName = targetUrl.Host
|
||||
targetHost = targetUrl.Scheme + "://" + targetUrl.Host
|
||||
isLocalPath := strings.HasPrefix(matchedTarget, "./") || strings.HasPrefix(matchedTarget, "/")
|
||||
|
||||
// 调整请求 URI
|
||||
reqURI = strings.Replace(reqURI, matchedPrefix, targetUrl.Path, 1)
|
||||
reqURIwithQuery = strings.Replace(reqURIwithQuery, matchedPrefix, targetUrl.Path, 1)
|
||||
var rawImageAbs string
|
||||
var metadata config.MetaFile
|
||||
|
||||
// 构造远程地址
|
||||
realRemoteAddr = targetHost + reqURIwithQuery
|
||||
if isLocalPath {
|
||||
// 处理本地路径
|
||||
localPath := strings.TrimPrefix(reqURI, matchedPrefix)
|
||||
rawImageAbs = path.Join(matchedTarget, localPath)
|
||||
|
||||
if !helper.FileExists(rawImageAbs) {
|
||||
log.Warnf("本地文件不存在: %s", rawImageAbs)
|
||||
return c.SendStatus(fiber.StatusNotFound)
|
||||
}
|
||||
|
||||
// 为本地文件创建或获取元数据
|
||||
metadata = helper.ReadMetadata(reqURIwithQuery, "", reqHostname)
|
||||
if metadata.Checksum != helper.HashFile(rawImageAbs) {
|
||||
log.Info("本地文件已更改,更新元数据...")
|
||||
helper.WriteMetadata(reqURIwithQuery, "", reqHostname)
|
||||
}
|
||||
} else {
|
||||
// 处理远程URL
|
||||
targetUrl, _ := url.Parse(matchedTarget)
|
||||
targetHostName = targetUrl.Host
|
||||
targetHost = targetUrl.Scheme + "://" + targetUrl.Host
|
||||
reqURI = strings.Replace(reqURI, matchedPrefix, targetUrl.Path, 1)
|
||||
reqURIwithQuery = strings.Replace(reqURIwithQuery, matchedPrefix, targetUrl.Path, 1)
|
||||
realRemoteAddr = targetHost + reqURIwithQuery
|
||||
|
||||
// 获取远程图像元数据
|
||||
metadata = fetchRemoteImg(realRemoteAddr, targetHostName)
|
||||
rawImageAbs = path.Join(config.Config.RemoteRawPath, targetHostName, metadata.Id)
|
||||
}
|
||||
|
||||
// 处理非图片文件
|
||||
if !helper.IsImageFile(filename) {
|
||||
log.Infof("Non-image file requested: %s", reqURI)
|
||||
log.Infof("Redirecting to: %s", realRemoteAddr)
|
||||
return c.Redirect(realRemoteAddr, fiber.StatusFound)
|
||||
if isLocalPath {
|
||||
return c.SendFile(rawImageAbs)
|
||||
} else {
|
||||
log.Infof("Redirecting to: %s", realRemoteAddr)
|
||||
return c.Redirect(realRemoteAddr, fiber.StatusFound)
|
||||
}
|
||||
}
|
||||
|
||||
// 检查允许的文件类型
|
||||
@ -91,10 +118,6 @@ func Convert(c *fiber.Ctx) error {
|
||||
return c.Status(http.StatusBadRequest).SendString(msg)
|
||||
}
|
||||
|
||||
// 获取远程图像元数据
|
||||
metadata := fetchRemoteImg(realRemoteAddr, targetHostName)
|
||||
rawImageAbs := path.Join(config.Config.RemoteRawPath, targetHostName, metadata.Id)
|
||||
|
||||
// 后续的图像处理逻辑
|
||||
supportedFormats := helper.GuessSupportedFormat(reqHeader)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user