@@ -14,10 +14,11 @@ import (
1414 "github.com/OpenListTeam/OpenList/v4/internal/op"
1515 "github.com/OpenListTeam/OpenList/v4/internal/stream"
1616 "github.com/OpenListTeam/OpenList/v4/internal/task"
17+ "github.com/OpenListTeam/OpenList/v4/pkg/http_range"
1718 "github.com/OpenListTeam/OpenList/v4/pkg/utils"
19+ "github.com/OpenListTeam/tache"
1820 "github.com/pkg/errors"
1921 log "github.com/sirupsen/logrus"
20- "github.com/OpenListTeam/tache"
2122)
2223
2324type TransferTask struct {
@@ -30,6 +31,7 @@ type TransferTask struct {
3031 SrcStorageMp string `json:"src_storage_mp"`
3132 DstStorageMp string `json:"dst_storage_mp"`
3233 DeletePolicy DeletePolicy `json:"delete_policy"`
34+ Url string `json:"-"`
3335}
3436
3537func (t * TransferTask ) Run () error {
@@ -40,13 +42,42 @@ func (t *TransferTask) Run() error {
4042 t .SetStartTime (time .Now ())
4143 defer func () { t .SetEndTime (time .Now ()) }()
4244 if t .SrcStorage == nil {
45+ if t .DeletePolicy == UploadDownloadStream {
46+ rrc , err := stream .GetRangeReadCloserFromLink (t .GetTotalBytes (), & model.Link {URL : t .Url })
47+ if err != nil {
48+ return err
49+ }
50+ r , err := rrc .RangeRead (t .Ctx (), http_range.Range {Length : t .GetTotalBytes ()})
51+ if err != nil {
52+ return err
53+ }
54+ name := t .SrcObjPath
55+ mimetype := utils .GetMimeType (name )
56+ s := & stream.FileStream {
57+ Ctx : nil ,
58+ Obj : & model.Object {
59+ Name : name ,
60+ Size : t .GetTotalBytes (),
61+ Modified : time .Now (),
62+ IsFolder : false ,
63+ },
64+ Reader : r ,
65+ Mimetype : mimetype ,
66+ Closers : utils .NewClosers (rrc ),
67+ }
68+ defer s .Close ()
69+ return op .Put (t .Ctx (), t .DstStorage , t .DstDirPath , s , t .SetProgress )
70+ }
4371 return transferStdPath (t )
4472 } else {
4573 return transferObjPath (t )
4674 }
4775}
4876
4977func (t * TransferTask ) GetName () string {
78+ if t .DeletePolicy == UploadDownloadStream {
79+ return fmt .Sprintf ("upload [%s](%s) to [%s](%s)" , t .SrcObjPath , t .Url , t .DstStorageMp , t .DstDirPath )
80+ }
5081 return fmt .Sprintf ("transfer [%s](%s) to [%s](%s)" , t .SrcStorageMp , t .SrcObjPath , t .DstStorageMp , t .DstDirPath )
5182}
5283
0 commit comments