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