@@ -12,11 +12,13 @@ import (
1212 "net/http/cookiejar"
1313 "net/url"
1414 "os"
15+ "path"
1516 "regexp"
1617 "sort"
1718 "strconv"
1819 "strings"
1920 "time"
21+ "unicode/utf8"
2022
2123 "golang.org/x/sync/semaphore"
2224
@@ -57,6 +59,29 @@ const (
5759 CHANNEL_ID = "web_cloud.189.cn"
5860)
5961
62+ func (y * Cloud189PC ) sanitizeName (name string ) string {
63+ if ! y .StripEmoji {
64+ return name
65+ }
66+ b := strings.Builder {}
67+ for _ , r := range name {
68+ if utf8 .RuneLen (r ) == 4 {
69+ continue
70+ }
71+ b .WriteRune (r )
72+ }
73+ sanitized := b .String ()
74+ if sanitized == "" {
75+ ext := path .Ext (name )
76+ if ext != "" {
77+ sanitized = "file" + ext
78+ } else {
79+ sanitized = "file"
80+ }
81+ }
82+ return sanitized
83+ }
84+
6085func (y * Cloud189PC ) SignatureHeader (url , method , params string , isFamily bool ) map [string ]string {
6186 dateOfGmt := getHttpDateStr ()
6287 sessionKey := y .getTokenInfo ().SessionKey
@@ -475,10 +500,11 @@ func (y *Cloud189PC) refreshSession() (err error) {
475500func (y * Cloud189PC ) StreamUpload (ctx context.Context , dstDir model.Obj , file model.FileStreamer , up driver.UpdateProgress , isFamily bool , overwrite bool ) (model.Obj , error ) {
476501 size := file .GetSize ()
477502 sliceSize := partSize (size )
503+ safeName := y .sanitizeName (file .GetName ())
478504
479505 params := Params {
480506 "parentFolderId" : dstDir .GetID (),
481- "fileName" : url .QueryEscape (file . GetName () ),
507+ "fileName" : url .QueryEscape (safeName ),
482508 "fileSize" : fmt .Sprint (file .GetSize ()),
483509 "sliceSize" : fmt .Sprint (sliceSize ),
484510 "lazyCheck" : "1" ,
@@ -596,7 +622,8 @@ func (y *Cloud189PC) RapidUpload(ctx context.Context, dstDir model.Obj, stream m
596622 return nil , errors .New ("invalid hash" )
597623 }
598624
599- uploadInfo , err := y .OldUploadCreate (ctx , dstDir .GetID (), fileMd5 , stream .GetName (), fmt .Sprint (stream .GetSize ()), isFamily )
625+ safeName := y .sanitizeName (stream .GetName ())
626+ uploadInfo , err := y .OldUploadCreate (ctx , dstDir .GetID (), fileMd5 , safeName , fmt .Sprint (stream .GetSize ()), isFamily )
600627 if err != nil {
601628 return nil , err
602629 }
@@ -615,6 +642,7 @@ func (y *Cloud189PC) FastUpload(ctx context.Context, dstDir model.Obj, file mode
615642 tmpF * os.File
616643 err error
617644 )
645+ safeName := y .sanitizeName (file .GetName ())
618646 size := file .GetSize ()
619647 if _ , ok := cache .(io.ReaderAt ); ! ok && size > 0 {
620648 tmpF , err = os .CreateTemp (conf .Conf .TempDir , "file-*" )
@@ -697,7 +725,7 @@ func (y *Cloud189PC) FastUpload(ctx context.Context, dstDir model.Obj, file mode
697725 //step.2 预上传
698726 params := Params {
699727 "parentFolderId" : dstDir .GetID (),
700- "fileName" : url .QueryEscape (file . GetName () ),
728+ "fileName" : url .QueryEscape (safeName ),
701729 "fileSize" : fmt .Sprint (file .GetSize ()),
702730 "fileMd5" : fileMd5Hex ,
703731 "sliceSize" : fmt .Sprint (sliceSize ),
@@ -833,9 +861,10 @@ func (y *Cloud189PC) OldUpload(ctx context.Context, dstDir model.Obj, file model
833861 return nil , err
834862 }
835863 rateLimited := driver .NewLimitedUploadStream (ctx , io .NopCloser (tempFile ))
864+ safeName := y .sanitizeName (file .GetName ())
836865
837866 // 创建上传会话
838- uploadInfo , err := y .OldUploadCreate (ctx , dstDir .GetID (), fileMd5 , file . GetName () , fmt .Sprint (file .GetSize ()), isFamily )
867+ uploadInfo , err := y .OldUploadCreate (ctx , dstDir .GetID (), fileMd5 , safeName , fmt .Sprint (file .GetSize ()), isFamily )
839868 if err != nil {
840869 return nil , err
841870 }
0 commit comments