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
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
|
||
|
}
|