Files
Atay-Makhzan/services/attachment/attachment.go
T

53 lines
1.4 KiB
Go
Raw Normal View History

2021-09-08 23:19:30 +08:00
// Copyright 2021 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
2021-09-08 23:19:30 +08:00
package attachment
import (
"bytes"
2021-09-23 16:45:36 +01:00
"context"
2021-09-08 23:19:30 +08:00
"fmt"
"io"
"code.gitea.io/gitea/models/db"
2021-11-19 21:39:57 +08:00
repo_model "code.gitea.io/gitea/models/repo"
2021-09-08 23:19:30 +08:00
"code.gitea.io/gitea/modules/storage"
"code.gitea.io/gitea/modules/upload"
2021-10-24 23:12:43 +02:00
"code.gitea.io/gitea/modules/util"
2021-09-08 23:19:30 +08:00
"github.com/google/uuid"
)
// NewAttachment creates a new attachment object, but do not verify.
2021-11-19 21:39:57 +08:00
func NewAttachment(attach *repo_model.Attachment, file io.Reader) (*repo_model.Attachment, error) {
2021-09-08 23:19:30 +08:00
if attach.RepoID == 0 {
return nil, fmt.Errorf("attachment %s should belong to a repository", attach.Name)
}
err := db.WithTx(db.DefaultContext, func(ctx context.Context) error {
2021-09-08 23:19:30 +08:00
attach.UUID = uuid.New().String()
size, err := storage.Attachments.Save(attach.RelativePath(), file, -1)
if err != nil {
return fmt.Errorf("Create: %w", err)
2021-09-08 23:19:30 +08:00
}
attach.Size = size
return db.Insert(ctx, attach)
2021-09-08 23:19:30 +08:00
})
return attach, err
}
// UploadAttachment upload new attachment into storage and update database
func UploadAttachment(file io.Reader, allowedTypes string, opts *repo_model.Attachment) (*repo_model.Attachment, error) {
2021-09-08 23:19:30 +08:00
buf := make([]byte, 1024)
2021-10-24 23:12:43 +02:00
n, _ := util.ReadAtMost(file, buf)
buf = buf[:n]
2021-09-08 23:19:30 +08:00
if err := upload.Verify(buf, opts.Name, allowedTypes); err != nil {
2021-09-08 23:19:30 +08:00
return nil, err
}
return NewAttachment(opts, io.MultiReader(bytes.NewReader(buf), file))
2021-09-08 23:19:30 +08:00
}