从 oss 下载原图
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,3 +1,4 @@
|
||||
data
|
||||
dist
|
||||
tmp
|
||||
oss
|
||||
|
@@ -1,10 +1,13 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"image"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
|
||||
"github.com/chai2010/webp"
|
||||
@@ -20,18 +23,45 @@ type Image struct {
|
||||
}
|
||||
|
||||
// 初始化图片
|
||||
func (img *Image) Init(content string) (err error) {
|
||||
var body io.ReadCloser
|
||||
func (img *Image) Init(content string) error {
|
||||
|
||||
if len(regexp.MustCompile(`image.gameuiux.cn`).FindStringSubmatch(content)) > 0 {
|
||||
key := regexp.MustCompile(`^https?://image.gameuiux.cn/`).ReplaceAllString(content, "")
|
||||
filePath := filepath.Join("oss", key)
|
||||
|
||||
// 从OSS中读取图片
|
||||
bucket := GetBucket("gameui-image2")
|
||||
body, err = bucket.GetObject(key)
|
||||
// 先检查本地是否存在原图, 没有则从oss下载
|
||||
if _, err := os.Stat(filePath); err != nil {
|
||||
|
||||
ensureDirExists := func(filePath string) error {
|
||||
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")
|
||||
fmt.Println("从 OSS 下载:", key, filePath)
|
||||
err = bucket.GetObjectToFile(key, filePath)
|
||||
if err != nil {
|
||||
log.Println("Failed to download file: ", err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// 从本地打开文件
|
||||
body, err := os.Open(filePath)
|
||||
if err != nil {
|
||||
log.Println("读取图片失败", err)
|
||||
return
|
||||
log.Println("打开本地图片失败:", err)
|
||||
return err
|
||||
}
|
||||
defer body.Close()
|
||||
|
||||
@@ -42,25 +72,25 @@ func (img *Image) Init(content string) (err error) {
|
||||
|
||||
if err != nil {
|
||||
log.Println("读取图片失败", err)
|
||||
return
|
||||
return err
|
||||
}
|
||||
return
|
||||
return nil
|
||||
}
|
||||
|
||||
// 将文件解码为 image.Image
|
||||
img.image, img.format, err = image.Decode(body)
|
||||
if err != nil {
|
||||
log.Println("解码图像失败", err)
|
||||
return
|
||||
return err
|
||||
}
|
||||
return
|
||||
return nil
|
||||
} else {
|
||||
var resp *http.Response
|
||||
log.Println("直接从网络下载图片:", content)
|
||||
resp, err = http.Get(content)
|
||||
resp, err := http.Get(content)
|
||||
if err != nil {
|
||||
log.Println("下载图片失败", err)
|
||||
return
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
@@ -70,19 +100,19 @@ func (img *Image) Init(content string) (err error) {
|
||||
img.data, err = io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
log.Println("读取图片失败", err)
|
||||
return
|
||||
return err
|
||||
}
|
||||
println("数据长度:", len(img.data))
|
||||
return
|
||||
return nil
|
||||
}
|
||||
|
||||
// 将文件解码为 image.Image
|
||||
img.image, img.format, err = image.Decode(resp.Body)
|
||||
if err != nil {
|
||||
log.Println("解码图像失败", err)
|
||||
return
|
||||
return nil
|
||||
}
|
||||
return
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user