stufflog graphql server
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

53 lines
1.1 KiB

package services
import (
"context"
"git.aiterp.net/stufflog/server/internal/slerrors"
"git.aiterp.net/stufflog/server/internal/space"
"io"
"strings"
)
type Upload struct {
s3 *space.Space
}
func (upload *Upload) UploadImage(ctx context.Context, name string, contentType string, size int64, reader io.Reader) (string, error) {
if !allowedImages[contentType] {
return "", slerrors.Forbidden("Content type " + contentType + " is not allowed as an image.")
}
if !strings.HasSuffix(name, extensions[contentType]) {
name += extensions[contentType]
}
err := upload.s3.UploadFile(ctx, name, contentType, reader, size)
if err != nil {
return "", err
}
return upload.s3.URLFromPath(name), nil
}
func (upload *Upload) Delete(ctx context.Context, url string) error {
name, err := upload.s3.PathFromURL(url)
if err != nil {
return err
}
return upload.s3.RemoveFile(ctx, name)
}
var allowedImages = map[string]bool{
"image/jpg": true,
"image/jpeg": true,
"image/gif": true,
"image/png": true,
"image/bmp": false,
}
var extensions = map[string]string{
"image/jpg": ".jpg",
"image/jpeg": ".jpg",
"image/gif": ".gif",
"image/png": ".png",
}