@@ -2,20 +2,19 @@ package _139
2
2
3
3
import (
4
4
"context"
5
- "encoding/base64"
6
5
"encoding/xml"
7
6
"fmt"
8
7
"io"
9
8
"net/http"
10
9
"path"
11
10
"strconv"
12
- "strings"
13
11
"time"
14
12
15
13
"github.com/alist-org/alist/v3/drivers/base"
16
14
"github.com/alist-org/alist/v3/internal/driver"
17
15
"github.com/alist-org/alist/v3/internal/errs"
18
16
"github.com/alist-org/alist/v3/internal/model"
17
+ streamPkg "github.com/alist-org/alist/v3/internal/stream"
19
18
"github.com/alist-org/alist/v3/pkg/cron"
20
19
"github.com/alist-org/alist/v3/pkg/utils"
21
20
"github.com/alist-org/alist/v3/pkg/utils/random"
@@ -72,28 +71,29 @@ func (d *Yun139) Init(ctx context.Context) error {
72
71
default :
73
72
return errs .NotImplement
74
73
}
75
- if d .ref != nil {
76
- return nil
77
- }
78
- decode , err := base64 .StdEncoding .DecodeString (d .Authorization )
79
- if err != nil {
80
- return err
81
- }
82
- decodeStr := string (decode )
83
- splits := strings .Split (decodeStr , ":" )
84
- if len (splits ) < 2 {
85
- return fmt .Errorf ("authorization is invalid, splits < 2" )
86
- }
87
- d .Account = splits [1 ]
88
- _ , err = d .post ("/orchestration/personalCloud/user/v1.0/qryUserExternInfo" , base.Json {
89
- "qryUserExternInfoReq" : base.Json {
90
- "commonAccountInfo" : base.Json {
91
- "account" : d .getAccount (),
92
- "accountType" : 1 ,
93
- },
94
- },
95
- }, nil )
96
- return err
74
+ // if d.ref != nil {
75
+ // return nil
76
+ // }
77
+ // decode, err := base64.StdEncoding.DecodeString(d.Authorization)
78
+ // if err != nil {
79
+ // return err
80
+ // }
81
+ // decodeStr := string(decode)
82
+ // splits := strings.Split(decodeStr, ":")
83
+ // if len(splits) < 2 {
84
+ // return fmt.Errorf("authorization is invalid, splits < 2")
85
+ // }
86
+ // d.Account = splits[1]
87
+ // _, err = d.post("/orchestration/personalCloud/user/v1.0/qryUserExternInfo", base.Json{
88
+ // "qryUserExternInfoReq": base.Json{
89
+ // "commonAccountInfo": base.Json{
90
+ // "account": d.getAccount(),
91
+ // "accountType": 1,
92
+ // },
93
+ // },
94
+ // }, nil)
95
+ // return err
96
+ return nil
97
97
}
98
98
99
99
func (d * Yun139 ) InitReference (storage driver.Driver ) error {
@@ -503,53 +503,44 @@ func (d *Yun139) Remove(ctx context.Context, obj model.Obj) error {
503
503
}
504
504
}
505
505
506
- const (
507
- _ = iota //ignore first value by assigning to blank identifier
508
- KB = 1 << (10 * iota )
509
- MB
510
- GB
511
- TB
512
- )
513
-
514
506
func (d * Yun139 ) getPartSize (size int64 ) int64 {
515
507
if d .CustomUploadPartSize != 0 {
516
508
return d .CustomUploadPartSize
517
509
}
518
510
// 网盘对于分片数量存在上限
519
- if size / GB > 30 {
520
- return 512 * MB
511
+ if size / utils . GB > 30 {
512
+ return 512 * utils . MB
521
513
}
522
- return 100 * MB
514
+ return 100 * utils . MB
523
515
}
524
516
525
517
func (d * Yun139 ) Put (ctx context.Context , dstDir model.Obj , stream model.FileStreamer , up driver.UpdateProgress ) error {
526
518
switch d .Addition .Type {
527
519
case MetaPersonalNew :
528
520
var err error
529
521
fullHash := stream .GetHash ().GetHash (utils .SHA256 )
530
- if len (fullHash ) <= 0 {
531
- tmpF , err := stream .CacheFullInTempFile ()
532
- if err != nil {
533
- return err
534
- }
535
- fullHash , err = utils .HashFile (utils .SHA256 , tmpF )
522
+ if len (fullHash ) != utils .SHA256 .Width {
523
+ _ , fullHash , err = streamPkg .CacheFullInTempFileAndHash (stream , utils .SHA256 )
536
524
if err != nil {
537
525
return err
538
526
}
539
527
}
540
528
541
- partInfos := []PartInfo {}
542
- var partSize = d .getPartSize (stream .GetSize ())
543
- part := (stream .GetSize () + partSize - 1 ) / partSize
544
- if part == 0 {
529
+ size := stream .GetSize ()
530
+ var partSize = d .getPartSize (size )
531
+ part := size / partSize
532
+ if size % partSize > 0 {
533
+ part ++
534
+ } else if part == 0 {
545
535
part = 1
546
536
}
537
+ partInfos := make ([]PartInfo , 0 , part )
547
538
for i := int64 (0 ); i < part ; i ++ {
548
539
if utils .IsCanceled (ctx ) {
549
540
return ctx .Err ()
550
541
}
551
542
start := i * partSize
552
- byteSize := stream . GetSize () - start
543
+ byteSize := size - start
553
544
if byteSize > partSize {
554
545
byteSize = partSize
555
546
}
@@ -577,7 +568,7 @@ func (d *Yun139) Put(ctx context.Context, dstDir model.Obj, stream model.FileStr
577
568
"contentType" : "application/octet-stream" ,
578
569
"parallelUpload" : false ,
579
570
"partInfos" : firstPartInfos ,
580
- "size" : stream . GetSize () ,
571
+ "size" : size ,
581
572
"parentFileId" : dstDir .GetID (),
582
573
"name" : stream .GetName (),
583
574
"type" : "file" ,
@@ -630,7 +621,7 @@ func (d *Yun139) Put(ctx context.Context, dstDir model.Obj, stream model.FileStr
630
621
}
631
622
632
623
// Progress
633
- p := driver .NewProgress (stream . GetSize () , up )
624
+ p := driver .NewProgress (size , up )
634
625
635
626
rateLimited := driver .NewLimitedUploadStream (ctx , stream )
636
627
// 上传所有分片
@@ -790,12 +781,14 @@ func (d *Yun139) Put(ctx context.Context, dstDir model.Obj, stream model.FileStr
790
781
return fmt .Errorf ("get file upload url failed with result code: %s, message: %s" , resp .Data .Result .ResultCode , resp .Data .Result .ResultDesc )
791
782
}
792
783
784
+ size := stream .GetSize ()
793
785
// Progress
794
- p := driver .NewProgress (stream .GetSize (), up )
795
-
796
- var partSize = d .getPartSize (stream .GetSize ())
797
- part := (stream .GetSize () + partSize - 1 ) / partSize
798
- if part == 0 {
786
+ p := driver .NewProgress (size , up )
787
+ var partSize = d .getPartSize (size )
788
+ part := size / partSize
789
+ if size % partSize > 0 {
790
+ part ++
791
+ } else if part == 0 {
799
792
part = 1
800
793
}
801
794
rateLimited := driver .NewLimitedUploadStream (ctx , stream )
@@ -805,10 +798,7 @@ func (d *Yun139) Put(ctx context.Context, dstDir model.Obj, stream model.FileStr
805
798
}
806
799
807
800
start := i * partSize
808
- byteSize := stream .GetSize () - start
809
- if byteSize > partSize {
810
- byteSize = partSize
811
- }
801
+ byteSize := min (size - start , partSize )
812
802
813
803
limitReader := io .LimitReader (rateLimited , byteSize )
814
804
// Update Progress
@@ -820,7 +810,7 @@ func (d *Yun139) Put(ctx context.Context, dstDir model.Obj, stream model.FileStr
820
810
821
811
req = req .WithContext (ctx )
822
812
req .Header .Set ("Content-Type" , "text/plain;name=" + unicode (stream .GetName ()))
823
- req .Header .Set ("contentSize" , strconv .FormatInt (stream . GetSize () , 10 ))
813
+ req .Header .Set ("contentSize" , strconv .FormatInt (size , 10 ))
824
814
req .Header .Set ("range" , fmt .Sprintf ("bytes=%d-%d" , start , start + byteSize - 1 ))
825
815
req .Header .Set ("uploadtaskID" , resp .Data .UploadResult .UploadTaskID )
826
816
req .Header .Set ("rangeType" , "0" )
0 commit comments