| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package file
- import (
- "fmt"
- "mime/multipart"
- "os"
- "path/filepath"
- "strings"
- "github.com/disintegration/imaging"
- "github.com/gin-gonic/gin"
- "github.com/runningwater/gohub/pkg/app"
- "github.com/runningwater/gohub/pkg/auth"
- "github.com/runningwater/gohub/pkg/helpers"
- )
- // Put 将数据写入文件
- // 如果文件不存在,则创建文件
- // 如果文件存在,则覆盖文件
- // data: 要写入的数据
- // to: 要写入的文件路径
- // return:
- // 如果成功,则返回 nil
- // 如果失败,则返回错误信息
- func Put(data []byte, to string) error {
- return os.WriteFile(to, data, 0644)
- }
- // Exists 判断文件是否存在
- // path: 文件路径
- // return:
- // 如果文件存在,则返回 true
- // 如果文件不存在,则返回 false
- func Exists(path string) bool {
- _, err := os.Stat(path)
- return !os.IsNotExist(err)
- }
- func NameWithoutExtension(fileName string) string {
- return strings.TrimSuffix(fileName, filepath.Ext(fileName))
- }
- func SaveUploadAvatar(c *gin.Context, file *multipart.FileHeader) (string, error) {
- var avatar string
- // 确保目录存在,不存在创建
- publicPath := "public"
- dirName := fmt.Sprintf("/uploads/avatars/%s/%s/", app.TimenowInTimezone().Format("2006/01/02"), auth.CurrentUID(c))
- if err := os.MkdirAll(publicPath+dirName, 0755); err != nil {
- return "", err
- }
- // 保存文件
- fileName := randomNameFromUploadFile(file)
- avatarPath := publicPath + dirName + fileName
- if err := c.SaveUploadedFile(file, avatarPath); err != nil {
- return avatar, err
- }
- // 剪裁图片
- img, err := imaging.Open(avatarPath, imaging.AutoOrientation(true))
- if err != nil {
- return avatar, err
- }
- // 剪裁为 256x256
- resizeAvatar := imaging.Thumbnail(img, 256, 256, imaging.Lanczos)
- resizeAvatarName := randomNameFromUploadFile(file)
- resizeAvatarPath := publicPath + dirName + resizeAvatarName
- // 保存为 JPEG 格式
- err = imaging.Save(resizeAvatar, resizeAvatarPath)
- if err != nil {
- return avatar, err
- }
- // 删除原文件
- err = os.Remove(avatarPath)
- if err != nil {
- return avatar, err
- }
- return dirName + resizeAvatarName, nil
- }
- func randomNameFromUploadFile(file *multipart.FileHeader) string {
- return helpers.RandomString(16) + filepath.Ext(file.Filename)
- }
|