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.

72 lines
1.7 KiB

9 months ago
package biz
import (
"context"
"fm-upload/internal/data/model"
"fm-upload/internal/data/model/request"
"fmt"
"io"
"mime/multipart"
"os"
"time"
"github.com/go-kratos/kratos/v2/log"
)
const (
resumeLimit = 1023 * 1048576
chunkSize = 300 * 1048576
)
// GreeterRepo is a Greater repo.
type StorageRepo interface {
SaveToHw(context.Context, []byte, string, string) (*model.MyPutRet, error)
SaveFileToHw(context.Context, string, string, string) (*model.MyPutRet, error)
}
// GreeterUsecase is a Greeter usecase.
type StorageUsecase struct {
repo StorageRepo
log *log.Helper
}
// NewGreeterUsecase new a Greeter usecase.
func NewStorageUsecase(repo StorageRepo, logger log.Logger) *StorageUsecase {
return &StorageUsecase{repo: repo, log: log.NewHelper(logger)}
}
func (uc *StorageUsecase) UploadToServer(ctx context.Context, oName string, resData request.UploadResponse, key string, fileH *multipart.FileHeader, bucket string) (*request.UploadResponse, error) {
t1 := time.Now()
var (
err error
ret *model.MyPutRet
)
if fileH.Size > resumeLimit {
file, _ := fileH.Open()
defer file.Close()
var testLocalFile *os.File
fileN := "/tmp/" + key[len(key)-20:]
testLocalFile, err = os.CreateTemp("/tmp", key[len(key)-20:])
if err != nil {
return nil, err
}
defer os.Remove(fileN)
io.Copy(testLocalFile, file)
// _, err = HwUploadFilePartToServer(fileN, key, bucket)
} else {
file, _ := fileH.Open()
defer file.Close()
fileByte, _ := io.ReadAll(file)
ret, err = uc.repo.SaveToHw(ctx, fileByte, key, bucket)
}
if err != nil {
return nil, err
}
if err != nil {
return nil, err
}
resData.Time1 = fmt.Sprintf("%.3f", time.Since(t1).Seconds())
resData.File = ret.ReturnPrefix + key
return &resData, nil
}