存储到data
This commit is contained in:
@@ -64,7 +64,7 @@ func CheckColorNullRows(offset int) {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// 打开图像文件
|
// 打开图像文件
|
||||||
filepath := "oss/" + matches[1]
|
filepath := "data/oss/" + matches[1]
|
||||||
file, err := os.Open(filepath)
|
file, err := os.Open(filepath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("打开文件失败", index, item.ID, item.Content, err)
|
fmt.Println("打开文件失败", index, item.ID, item.Content, err)
|
||||||
|
24
bin/main.go
24
bin/main.go
@@ -7,6 +7,8 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
@@ -520,6 +522,13 @@ func main() {
|
|||||||
http.HandleFunc("/webp/", func(w http.ResponseWriter, r *http.Request) {
|
http.HandleFunc("/webp/", func(w http.ResponseWriter, r *http.Request) {
|
||||||
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
|
defer LogComponent(time.Now().UnixNano(), r) // 最后打印日志
|
||||||
|
|
||||||
|
// 如果本地文件存在,直接输出
|
||||||
|
filePath := filepath.Join("data/webp", r.URL.Path)
|
||||||
|
if _, err := os.Stat(filePath); err != nil {
|
||||||
|
http.ServeFile(w, r, filePath)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
reg := regexp.MustCompile(`^/webp/([0-9a-zA-Z]+)-([0-9a-zA-Z]+)-([0-9a-zA-Z]+)-([0-9]+)-([0-9]+)-([a-zA-Z]+).(jpg|jpeg|png|webp)$`)
|
reg := regexp.MustCompile(`^/webp/([0-9a-zA-Z]+)-([0-9a-zA-Z]+)-([0-9a-zA-Z]+)-([0-9]+)-([0-9]+)-([a-zA-Z]+).(jpg|jpeg|png|webp)$`)
|
||||||
matches := reg.FindStringSubmatch(r.URL.Path)
|
matches := reg.FindStringSubmatch(r.URL.Path)
|
||||||
if len(matches) != 8 {
|
if len(matches) != 8 {
|
||||||
@@ -547,6 +556,21 @@ func main() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 将生成的 WebP 文件保存到本地
|
||||||
|
err = os.MkdirAll(filepath.Dir(filePath), os.ModePerm)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("创建文件目录失败:", err)
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = os.WriteFile(filePath, data, 0644)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("保存文件失败:", err)
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 返回 WebP 图片数据
|
||||||
w.Header().Set("Content-Type", "image/webp")
|
w.Header().Set("Content-Type", "image/webp")
|
||||||
w.Header().Set("Cache-Control", "max-age=31536000")
|
w.Header().Set("Cache-Control", "max-age=31536000")
|
||||||
w.Write(data)
|
w.Write(data)
|
||||||
|
@@ -27,32 +27,17 @@ func (img *Image) Init(content string) error {
|
|||||||
|
|
||||||
if len(regexp.MustCompile(`image.gameuiux.cn`).FindStringSubmatch(content)) > 0 {
|
if len(regexp.MustCompile(`image.gameuiux.cn`).FindStringSubmatch(content)) > 0 {
|
||||||
key := regexp.MustCompile(`^https?://image.gameuiux.cn/`).ReplaceAllString(content, "")
|
key := regexp.MustCompile(`^https?://image.gameuiux.cn/`).ReplaceAllString(content, "")
|
||||||
filePath := filepath.Join("oss", key)
|
filePath := filepath.Join("data/oss", key)
|
||||||
|
|
||||||
// 先检查本地是否存在原图, 没有则从oss下载
|
// 先检查本地是否存在原图, 没有则从OSS下载
|
||||||
if _, err := os.Stat(filePath); err != nil {
|
if _, err := os.Stat(filePath); err != nil {
|
||||||
|
if err := os.MkdirAll(filepath.Dir(filePath), 0755); err != nil {
|
||||||
ensureDirExists := func(filePath string) error {
|
log.Fatalf("创建目录失败: %v\n", err)
|
||||||
dir := filepath.Dir(filePath) // 获取文件所在的目录
|
|
||||||
if _, err := os.Stat(dir); os.IsNotExist(err) {
|
|
||||||
// 如果目录不存在,创建多级目录
|
|
||||||
if err := os.MkdirAll(dir, 0755); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 确保目录存在
|
|
||||||
if err := ensureDirExists(filePath); err != nil {
|
|
||||||
log.Fatalf("Failed to create directory: %v\n", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
bucket := GetBucket("gameui-image2")
|
bucket := GetBucket("gameui-image2")
|
||||||
fmt.Println("从 OSS 下载:", key, filePath)
|
fmt.Println("从 OSS 下载:", key, filePath)
|
||||||
err = bucket.GetObjectToFile(key, filePath)
|
if err := bucket.GetObjectToFile(key, filePath); err != nil {
|
||||||
if err != nil {
|
log.Println("下载文件失败:", err)
|
||||||
log.Println("Failed to download file: ", err)
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user