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.
52 lines
1.0 KiB
52 lines
1.0 KiB
package files
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"io"
|
|
"time"
|
|
|
|
"git.aiterp.net/rpdata/api/internal/store"
|
|
"git.aiterp.net/rpdata/api/models"
|
|
)
|
|
|
|
// Upload adds a file to the space.
|
|
func Upload(ctx context.Context, name, mimeType, author string, size int64, input io.Reader) (models.File, error) {
|
|
if !allowdMimeTypes[mimeType] {
|
|
return models.File{}, errors.New("File type not allowed:" + mimeType)
|
|
}
|
|
|
|
if name == "" {
|
|
date := time.Now().UTC().Format("Jan 02 2006 15:04:05 MST")
|
|
name = "Unnamed file (" + date + ")"
|
|
}
|
|
if mimeType == "" {
|
|
mimeType = "binary/octet-stream"
|
|
}
|
|
|
|
id := makeID()
|
|
|
|
path, err := store.UploadFile(ctx, "files", id, mimeType, input, size)
|
|
if err != nil {
|
|
return models.File{}, err
|
|
}
|
|
|
|
file := models.File{
|
|
ID: id,
|
|
Kind: "upload",
|
|
Time: time.Now(),
|
|
Public: false,
|
|
Author: author,
|
|
Name: name,
|
|
MimeType: mimeType,
|
|
Size: size,
|
|
URL: store.URLFromPath(path),
|
|
}
|
|
|
|
err = collection.Insert(file)
|
|
if err != nil {
|
|
return models.File{}, err
|
|
}
|
|
|
|
return file, nil
|
|
}
|