调整以支持IMG_MAP情况下的本地路径

This commit is contained in:
wood chen 2024-10-22 20:18:09 +08:00
parent d872d71dcb
commit 3353d014d4
2 changed files with 41 additions and 18 deletions

View File

@ -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

View File

@ -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)