add download image from url

This commit is contained in:
Havoc412 2024-10-20 21:50:40 +08:00
parent 8d3c9ec832
commit 885e9e9727
3 changed files with 53 additions and 1 deletions

View File

@ -5,10 +5,12 @@ import (
"catface/app/global/errcode"
"catface/app/global/variable"
"catface/app/model"
"catface/app/service/upload_file"
"catface/app/service/users/curd"
userstoken "catface/app/service/users/token"
"catface/app/service/weixin"
"catface/app/utils/response"
"path/filepath"
"time"
"github.com/gin-gonic/gin"
@ -155,6 +157,13 @@ func (u *Users) WeixinLogin(context *gin.Context) {
userName := context.GetString(consts.ValidatorPrefix + "user_name")
userIp := context.ClientIP() // INFO 通过上下文获取 IP 信息。
// 0. 保存 user Avatar
if err := upload_file.DownloadImage(userAvatar, filepath.Join(variable.BasePath, "userAvatar")); err != nil {
// UPDATE 感觉这里需要更好的处理方式
response.Fail(context, consts.FilesUploadFailCode, consts.FilesUploadFailMsg, "")
return
}
// 1. 访问 微信 API 获取 openid
weixinRes, err := weixin.Code2Session(code)
if err != nil {

View File

@ -1,8 +1,14 @@
package upload_file
import (
"catface/app/global/my_errors"
"catface/app/global/variable"
"catface/app/utils/md5_encrypt"
"errors"
"fmt"
"image"
"io"
"net/http"
"os"
"path/filepath"
@ -56,3 +62,40 @@ func ResizeImage(srcPath string, dstPath string, targetWidth int) (targetHeight
err = imaging.Save(dstImg, dstPath)
return
}
func DownloadImage(imageUrl, dstPath string) error {
resp, err := http.Get(imageUrl)
if err != nil {
return err
}
defer resp.Body.Close()
// 检查响应状态码
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("图片下载失败,状态码: %d", resp.StatusCode)
}
if sequence := variable.SnowFlake.GetId(); sequence > 0 {
saveFileName := fmt.Sprintf("%d%s", sequence, filepath.Base(imageUrl))
saveFileName = md5_encrypt.MD5(saveFileName) + ".jpg"
fullSavePath := filepath.Join(dstPath, saveFileName)
file, err := os.Create(fullSavePath)
if err != nil {
variable.ZapLog.Error("文件保存出错:" + err.Error())
return err
}
defer file.Close()
_, err = io.Copy(file, resp.Body)
if err != nil {
variable.ZapLog.Error("文件写入出错:" + err.Error())
return err
}
} else {
err := errors.New(my_errors.ErrorsSnowflakeGetIdFail)
variable.ZapLog.Error("文件保存出错:" + err.Error())
return err
}
return nil
}

View File

@ -44,7 +44,7 @@ func Upload(context *gin.Context, savePath string) (r bool, finnalSavePath inter
// 文件上传可以设置按照 xxx年-xx月 格式存储
func generateYearMonthPath(savePathPre string) (string, string) {
returnPath := variable.BasePath + variable.ConfigYml.GetString("FileUploadSetting.UploadFileReturnPath")
curYearMonth := time.Now().Format("2006_01")
curYearMonth := time.Now().Format("2004_04")
newSavePathPre := savePathPre + curYearMonth
newReturnPathPre := returnPath + curYearMonth
// 相关路径不存在,创建目录