From 264739fd76a813e1067d1dac8373bb65fc6662d4 Mon Sep 17 00:00:00 2001 From: grngxd <36968271+grngxd@users.noreply.github.com> Date: Fri, 1 Aug 2025 08:43:25 +0100 Subject: [PATCH] add blurhash --- go.mod | 1 + go.sum | 3 +++ internal/api/routes/files.go | 16 ++++++++++++++++ internal/types/types.go | 3 ++- 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index c5b1d5e..f0c4941 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( ) require ( + github.com/bbrks/go-blurhash v1.1.1 // indirect github.com/bytedance/sonic v1.13.2 // indirect github.com/bytedance/sonic/loader v0.2.4 // indirect github.com/cloudwego/base64x v0.1.5 // indirect diff --git a/go.sum b/go.sum index 59c9bb3..6bbd414 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/bbrks/go-blurhash v1.1.1 h1:uoXOxRPDca9zHYabUTwvS4KnY++KKUbwFo+Yxb8ME4M= +github.com/bbrks/go-blurhash v1.1.1/go.mod h1:lkAsdyXp+EhARcUo85yS2G1o+Sh43I2ebF5togC4bAY= github.com/bytedance/sonic v1.13.2 h1:8/H1FempDZqC4VqjptGo14QQlJx8VdZJegxs6wwfqpQ= github.com/bytedance/sonic v1.13.2/go.mod h1:o68xyaF9u2gvVBuGHPlUVCy+ZfmNNO5ETf1+KgkJhz4= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= @@ -77,6 +79,7 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lithammer/shortuuid/v4 v4.2.0 h1:LMFOzVB3996a7b8aBuEXxqOBflbfPQAiVzkIcHO0h8c= github.com/lithammer/shortuuid/v4 v4.2.0/go.mod h1:D5noHZ2oFw/YaKCfGy0YxyE7M0wMbezmMjPdhyEFe6Y= +github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v1.14.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A= diff --git a/internal/api/routes/files.go b/internal/api/routes/files.go index 70c3468..fbe6efa 100644 --- a/internal/api/routes/files.go +++ b/internal/api/routes/files.go @@ -24,6 +24,9 @@ import ( "strings" "time" + "image" + + "github.com/bbrks/go-blurhash" "github.com/gin-gonic/gin" "github.com/gofrs/uuid" "github.com/golang-jwt/jwt/v5" @@ -84,12 +87,25 @@ func RegisterFileRoutes(cfg *types.StereoConfig, api *gin.RouterGroup) { return } + img, _, err := image.Decode(bytes.NewReader(buf)) + if err != nil { + types.ErrorInvalidFile.Throw(c, err) + return + } + + hash, err := blurhash.Encode(4, 3, img) + if err != nil { + types.ErrorInvalidFile.Throw(c, err) + return + } + fileMeta := types.File{ Owner: uid, Name: file.Filename, CreatedAt: time.Now(), Size: int64(len(buf)), Mime: fileType.MIME.Value, + Blurhash: hash, } if err := cfg.Database.Create(&fileMeta).Error; err != nil { diff --git a/internal/types/types.go b/internal/types/types.go index 535be51..0db5951 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -53,7 +53,8 @@ type File struct { Owner string `gorm:"not null;index"` Size int64 `gorm:"not null;type:bigint"` CreatedAt time.Time `gorm:"autoCreateTime"` - Mime string + Mime string ` gorm:"type:text"` + Blurhash string `gorm:"type:text"` } func (f *File) BeforeCreate(tx *gorm.DB) (err error) {