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 }