|
|
- package Util
-
- import (
- "errors"
- "fmt"
- "io/ioutil"
- "os"
- "strings"
-
- "github.com/gabriel-vasile/mimetype"
- )
-
- type FileObject struct {
- Filepath string
- PublicFilepath string
- Mimetype string
- Size int64
- }
-
- func WriteFile(fileBytes []byte, acceptedMime string) (FileObject, error) {
- var (
- mime *mimetype.MIME
- mimeSplit []string
- file *os.File
- fi os.FileInfo
- fileObject FileObject
- err error
- )
-
- mime = mimetype.Detect(fileBytes)
- mimeSplit = strings.Split(mime.String(), "/")
-
- if mimeSplit[0] != acceptedMime {
- return fileObject, errors.New("Invalid filetype provided")
- }
-
- file, err = ioutil.TempFile(
- fmt.Sprintf(
- "./Frontend/public/%ss/",
- mimeSplit[0],
- ),
- fmt.Sprintf(
- "%ss-*%s",
- mimeSplit[0],
- mime.Extension(),
- ),
- )
-
- if err != nil {
- return fileObject, err
- }
- defer file.Close()
-
- _, err = file.Write(fileBytes)
-
- fi, err = file.Stat()
- if err != nil {
- return fileObject, err
- }
-
- fileObject = FileObject{
- Filepath: file.Name(),
- PublicFilepath: strings.ReplaceAll(file.Name(), "./Frontend", ""),
- Mimetype: mime.String(),
- Size: fi.Size(),
- }
-
- return fileObject, err
- }
|