2025-12-04 12:56:39 +08:00
|
|
|
|
package pdf
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"os"
|
|
|
|
|
|
"path/filepath"
|
2025-12-04 13:20:03 +08:00
|
|
|
|
|
|
|
|
|
|
"go.uber.org/zap"
|
2025-12-04 12:56:39 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
2025-12-04 13:20:03 +08:00
|
|
|
|
var globalLogger *zap.Logger
|
|
|
|
|
|
|
|
|
|
|
|
// SetGlobalLogger 设置全局logger(用于资源路径查找)
|
|
|
|
|
|
func SetGlobalLogger(logger *zap.Logger) {
|
|
|
|
|
|
globalLogger = logger
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-04 13:42:32 +08:00
|
|
|
|
// GetResourcesPDFDir 获取resources/pdf目录路径(绝对路径)
|
2025-12-04 13:09:59 +08:00
|
|
|
|
// resources目录和可执行文件同级,例如:
|
2025-12-04 13:42:32 +08:00
|
|
|
|
// 生产环境:/app/tyapi-server (可执行文件) 和 /app/resources/pdf (资源文件)
|
|
|
|
|
|
// 开发环境:工作目录下的 resources/pdf 或 tyapi-server-gin/resources/pdf
|
2025-12-04 12:56:39 +08:00
|
|
|
|
func GetResourcesPDFDir() string {
|
2025-12-04 13:42:32 +08:00
|
|
|
|
// 候选路径列表(按优先级排序)
|
|
|
|
|
|
var candidatePaths []string
|
|
|
|
|
|
|
|
|
|
|
|
// 优先级1: 从可执行文件所在目录查找(生产环境和开发环境都适用)
|
2025-12-04 12:56:39 +08:00
|
|
|
|
if execPath, err := os.Executable(); err == nil {
|
|
|
|
|
|
execDir := filepath.Dir(execPath)
|
|
|
|
|
|
// 处理符号链接
|
|
|
|
|
|
if realPath, err := filepath.EvalSymlinks(execPath); err == nil {
|
|
|
|
|
|
execDir = filepath.Dir(realPath)
|
|
|
|
|
|
}
|
2025-12-04 13:42:32 +08:00
|
|
|
|
candidatePaths = append(candidatePaths, filepath.Join(execDir, "resources", "pdf"))
|
2025-12-04 12:56:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-04 13:42:32 +08:00
|
|
|
|
// 优先级2: 从工作目录查找(开发环境)
|
2025-12-04 13:09:59 +08:00
|
|
|
|
if workDir, err := os.Getwd(); err == nil {
|
2025-12-04 13:42:32 +08:00
|
|
|
|
candidatePaths = append(candidatePaths,
|
|
|
|
|
|
filepath.Join(workDir, "resources", "pdf"),
|
|
|
|
|
|
filepath.Join(workDir, "tyapi-server-gin", "resources", "pdf"),
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 尝试每个候选路径
|
|
|
|
|
|
for _, candidatePath := range candidatePaths {
|
|
|
|
|
|
absPath, err := filepath.Abs(candidatePath)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
continue
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if globalLogger != nil {
|
|
|
|
|
|
globalLogger.Debug("尝试查找resources/pdf目录", zap.String("path", absPath))
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 检查目录是否存在
|
|
|
|
|
|
if info, err := os.Stat(absPath); err == nil && info.IsDir() {
|
2025-12-04 13:20:03 +08:00
|
|
|
|
if globalLogger != nil {
|
2025-12-04 13:42:32 +08:00
|
|
|
|
globalLogger.Info("找到resources/pdf目录", zap.String("path", absPath))
|
2025-12-04 13:09:59 +08:00
|
|
|
|
}
|
2025-12-04 13:42:32 +08:00
|
|
|
|
return absPath
|
2025-12-04 13:09:59 +08:00
|
|
|
|
}
|
2025-12-04 13:42:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 所有候选路径都不存在,返回第一个候选路径的绝对路径(作为后备)
|
|
|
|
|
|
// 这样至少保证返回的是绝对路径,即使目录不存在
|
|
|
|
|
|
if len(candidatePaths) > 0 {
|
|
|
|
|
|
if absPath, err := filepath.Abs(candidatePaths[0]); err == nil {
|
2025-12-04 13:20:03 +08:00
|
|
|
|
if globalLogger != nil {
|
2025-12-04 13:42:32 +08:00
|
|
|
|
globalLogger.Warn("未找到resources/pdf目录,返回后备绝对路径", zap.String("path", absPath))
|
2025-12-04 13:09:59 +08:00
|
|
|
|
}
|
2025-12-04 13:42:32 +08:00
|
|
|
|
return absPath
|
2025-12-04 13:09:59 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-12-04 13:42:32 +08:00
|
|
|
|
|
|
|
|
|
|
// 最后的最后:从工作目录构建绝对路径
|
2025-12-04 13:09:59 +08:00
|
|
|
|
if workDir, err := os.Getwd(); err == nil {
|
2025-12-04 13:42:32 +08:00
|
|
|
|
absPath, err := filepath.Abs(filepath.Join(workDir, "resources", "pdf"))
|
|
|
|
|
|
if err == nil {
|
2025-12-04 13:20:03 +08:00
|
|
|
|
if globalLogger != nil {
|
2025-12-04 13:42:32 +08:00
|
|
|
|
globalLogger.Error("无法确定resources/pdf目录,返回工作目录下的绝对路径", zap.String("path", absPath))
|
2025-12-04 13:20:03 +08:00
|
|
|
|
}
|
2025-12-04 13:09:59 +08:00
|
|
|
|
return absPath
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-12-04 13:42:32 +08:00
|
|
|
|
|
|
|
|
|
|
// 完全无法确定路径
|
2025-12-04 13:20:03 +08:00
|
|
|
|
if globalLogger != nil {
|
2025-12-04 13:42:32 +08:00
|
|
|
|
globalLogger.Error("完全无法确定resources/pdf目录路径")
|
2025-12-04 13:20:03 +08:00
|
|
|
|
}
|
2025-12-04 13:42:32 +08:00
|
|
|
|
return ""
|
2025-12-04 12:56:39 +08:00
|
|
|
|
}
|
|
|
|
|
|
|