Interactive/pkg/services/attachments.go

54 lines
1.2 KiB
Go
Raw Normal View History

2024-02-04 10:40:20 +00:00
package services
import (
2024-03-10 10:38:42 +00:00
"mime/multipart"
"net/http"
"strings"
2024-02-04 10:40:20 +00:00
"code.smartsheep.studio/hydrogen/interactive/pkg/database"
"code.smartsheep.studio/hydrogen/interactive/pkg/models"
"github.com/google/uuid"
)
func NewAttachment(user models.Account, header *multipart.FileHeader) (models.Attachment, error) {
attachment := models.Attachment{
FileID: uuid.NewString(),
Filesize: header.Size,
Filename: header.Filename,
Mimetype: "unknown/unknown",
2024-03-02 17:23:11 +00:00
Type: models.AttachmentOthers,
2024-02-04 10:40:20 +00:00
AuthorID: user.ID,
}
// Open file
file, err := header.Open()
if err != nil {
return attachment, err
}
defer file.Close()
// Detect mimetype
fileHeader := make([]byte, 512)
_, err = file.Read(fileHeader)
if err != nil {
return attachment, err
}
attachment.Mimetype = http.DetectContentType(fileHeader)
2024-03-10 10:38:42 +00:00
switch strings.Split(attachment.Mimetype, "/")[0] {
case "image":
attachment.Type = models.AttachmentPhoto
case "video":
attachment.Type = models.AttachmentVideo
case "audio":
attachment.Type = models.AttachmentAudio
default:
attachment.Type = models.AttachmentOthers
}
2024-02-04 10:40:20 +00:00
// Save into database
err = database.C.Save(&attachment).Error
return attachment, err
}