|
- // Copyright 2020 The Gitea Authors. All rights reserved.
- // Use of this source code is governed by a MIT-style
- // license that can be found in the LICENSE file.
-
- package storage
-
- import (
- "fmt"
- "io"
-
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/obs"
- "code.gitea.io/gitea/modules/setting"
- )
-
- const (
- MinioStorageType = "minio"
- LocalStorageType = "local"
- )
-
- // ObjectStorage represents an object storage to handle a bucket and files
- type ObjectStorage interface {
- Save(path string, r io.Reader) (int64, error)
- Open(path string) (io.ReadCloser, error)
- DownloadAFile(bucket string, objectName string) (io.ReadCloser, error)
- Delete(path string) error
- DeleteDir(dir string) error
- PresignedGetURL(path string, fileName string) (string, error)
- PresignedPutURL(path string) (string, error)
- HasObject(path string) (bool, error)
- UploadObject(fileName, filePath string) error
- }
-
- // Copy copys a file from source ObjectStorage to dest ObjectStorage
- func Copy(dstStorage ObjectStorage, dstPath string, srcStorage ObjectStorage, srcPath string) (int64, error) {
- f, err := srcStorage.Open(srcPath)
- if err != nil {
- return 0, err
- }
- defer f.Close()
-
- return dstStorage.Save(dstPath, f)
- }
-
- var (
- // Attachments represents attachments storage
- Attachments ObjectStorage
- ObsCli *obs.ObsClient
- )
-
- // Init init the stoarge
- func Init() error {
- var err error
- switch setting.Attachment.StoreType {
- case LocalStorageType:
- Attachments, err = NewLocalStorage(setting.Attachment.Path)
- log.Info("local storage inited.")
- case MinioStorageType:
- minio := setting.Attachment.Minio
- Attachments, err = NewMinioStorage(
- minio.Endpoint,
- minio.AccessKeyID,
- minio.SecretAccessKey,
- minio.Bucket,
- minio.Location,
- minio.BasePath,
- minio.UseSSL,
- )
- log.Info("minio storage inited.")
- default:
- return fmt.Errorf("Unsupported attachment store type: %s", setting.Attachment.StoreType)
- }
-
- ObsCli, err = obs.New(setting.AccessKeyID, setting.SecretAccessKey, setting.Endpoint)
- if err != nil {
- log.Error("obs.New failed:", err)
- return err
- }
- log.Info("obs cli inited.")
-
- if err != nil {
- return err
- }
-
- return nil
- }
|