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 }