Resize the uploaded image to a max of 1024 pixels

This commit is contained in:
kolaente 2020-08-02 14:20:56 +02:00
parent 857e6e0719
commit 3138f6324d
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
2 changed files with 20 additions and 4 deletions

View File

@ -67,12 +67,12 @@ func (f *File) LoadFileMetaByID() (err error) {
}
// Create creates a new file from an FileHeader
func Create(f io.ReadCloser, realname string, realsize uint64, a web.Auth) (file *File, err error) {
func Create(f io.Reader, realname string, realsize uint64, a web.Auth) (file *File, err error) {
return CreateWithMime(f, realname, realsize, a, "")
}
// CreateWithMime creates a new file from an FileHeader and sets its mime type
func CreateWithMime(f io.ReadCloser, realname string, realsize uint64, a web.Auth, mime string) (file *File, err error) {
func CreateWithMime(f io.Reader, realname string, realsize uint64, a web.Auth, mime string) (file *File, err error) {
// Get and parse the configured file size
var maxSize datasize.ByteSize
@ -117,6 +117,6 @@ func (f *File) Delete() (err error) {
}
// Save saves a file to storage
func (f *File) Save(fcontent io.ReadCloser) error {
func (f *File) Save(fcontent io.Reader) error {
return afs.WriteReader(f.getFileName(), fcontent)
}

View File

@ -27,8 +27,13 @@ import (
"code.vikunja.io/api/pkg/modules/avatar/upload"
"code.vikunja.io/api/pkg/user"
"code.vikunja.io/web/handler"
"bytes"
"github.com/disintegration/imaging"
"github.com/gabriel-vasile/mimetype"
"github.com/labstack/echo/v4"
"image"
"image/png"
"io"
"net/http"
"strconv"
@ -133,8 +138,19 @@ func UploadAvatar(c echo.Context) (err error) {
u.AvatarFileID = 0
}
// Resize the new file to a max height of 1024
img, _, err := image.Decode(src)
if err != nil {
return handler.HandleHTTPError(err, c)
}
resizedImg := imaging.Resize(img, 0, 1024, imaging.Lanczos)
buf := &bytes.Buffer{}
if err := png.Encode(buf, resizedImg); err != nil {
return handler.HandleHTTPError(err, c)
}
// Save the file
f, err := files.CreateWithMime(src, file.Filename, uint64(file.Size), u, mime.String())
f, err := files.CreateWithMime(buf, file.Filename, uint64(file.Size), u, mime.String())
if err != nil {
if files.IsErrFileIsTooLarge(err) {
return echo.ErrBadRequest