@@ -7,9 +7,11 @@ import (
7
7
"files/pkg/diskcache"
8
8
"files/pkg/drivers/base"
9
9
"files/pkg/drivers/clouds/rclone/operations"
10
+ "files/pkg/drivers/posix/upload"
10
11
"files/pkg/files"
11
12
"files/pkg/models"
12
13
"files/pkg/preview"
14
+ "files/pkg/tasks"
13
15
"fmt"
14
16
"net/url"
15
17
"path/filepath"
@@ -356,6 +358,8 @@ func (s *CloudStorage) Delete(fileDeleteArg *models.FileDeleteArgs) ([]byte, err
356
358
357
359
klog .Infof ("Cloud delete, user: %s, param: %s" , user , common .ToJson (fileParam ))
358
360
361
+ // todo need to copy .keep file in fileParam.Path first
362
+
359
363
var invalidPaths []string
360
364
361
365
for _ , dirent := range dirents {
@@ -370,27 +374,7 @@ func (s *CloudStorage) Delete(fileDeleteArg *models.FileDeleteArgs) ([]byte, err
370
374
return common .ToBytes (invalidPaths ), fmt .Errorf ("invalid path" )
371
375
}
372
376
373
- for _ , dp := range dirents {
374
- dp = strings .TrimSpace (dp ) // /path/ or /file
375
-
376
- klog .Infof ("Cloud delete, user: %s, dirent: %s" , user , dp )
377
-
378
- dpd , err := url .PathUnescape (dp )
379
- if err != nil {
380
- klog .Errorf ("Cloud delete, path unescape error: %v, path: %s" , err , dp )
381
- deleteFailedPaths = append (deleteFailedPaths , dp )
382
- continue
383
- }
384
-
385
- _ , err = s .service .Delete (fileParam , dpd )
386
- if err != nil {
387
- klog .Errorf ("Cloud delete, delete files error: %v, user: %s" , err , user )
388
- deleteFailedPaths = append (deleteFailedPaths , dp )
389
- continue
390
- }
391
-
392
- klog .Infof ("Cloud delete, delete success, user: %s, file: %s" , user , dpd )
393
- }
377
+ deleteFailedPaths , _ = s .service .command .Delete (fileParam , dirents )
394
378
395
379
if err := s .service .command .GetOperation ().FsCacheClear (); err != nil {
396
380
klog .Errorf ("Cloud delete, fscache clear error: %v" , err )
@@ -539,14 +523,101 @@ func (s *CloudStorage) getFiles(fileParam *models.FileParam) (*models.CloudListR
539
523
return res , nil
540
524
}
541
525
526
+ /**
527
+ * UploadLink
528
+ */
542
529
func (s * CloudStorage ) UploadLink (fileUploadArg * models.FileUploadArgs ) ([]byte , error ) {
543
- return nil , nil
530
+ var user = fileUploadArg .FileParam .Owner
531
+
532
+ klog .Infof ("Cloud uploadLink, user: %s, param: %s" , user , common .ToJson (fileUploadArg .FileParam ))
533
+
534
+ data , err := upload .HandleUploadLink (fileUploadArg .FileParam , fileUploadArg .From )
535
+
536
+ klog .Infof ("Cloud uploadLink, done! data: %s" , string (data ))
537
+
538
+ return data , err
544
539
}
545
540
541
+ /**
542
+ * UploadedBytes
543
+ */
546
544
func (s * CloudStorage ) UploadedBytes (fileUploadArg * models.FileUploadArgs ) ([]byte , error ) {
547
- return nil , nil
545
+ var user = fileUploadArg .FileParam .Owner
546
+ klog .Infof ("Cloud uploadBytes, user: %s, param: %s" , user , common .ToJson (fileUploadArg ))
547
+
548
+ data , err := upload .HandleUploadedBytes (fileUploadArg .FileParam , fileUploadArg .FileName )
549
+
550
+ klog .Infof ("Cloud uploadBytes, done! data: %s" , string (data ))
551
+
552
+ return data , err
548
553
}
549
554
555
+ /**
556
+ * UploadChunks
557
+ */
550
558
func (s * CloudStorage ) UploadChunks (fileUploadArg * models.FileUploadArgs ) ([]byte , error ) {
551
- return nil , nil
559
+ var user = fileUploadArg .FileParam .Owner
560
+ var uploadId = fileUploadArg .UploadId
561
+ var chunkInfo = fileUploadArg .ChunkInfo
562
+ var taskId = chunkInfo .UploadToCloudTaskId
563
+ // var canceled = chunkInfo.UploadToCloudTaskCancel
564
+
565
+ if taskId != "" { // ~ query task status
566
+ // todo cancel
567
+ return s .service .checkUploadTaskState (user , uploadId , taskId , chunkInfo )
568
+ }
569
+
570
+ klog .Infof ("Cloud uploadChunks, user: %s, uploadId: %s, param: %s" , user , fileUploadArg .UploadId , common .ToJson (fileUploadArg .FileParam ))
571
+
572
+ ok , fileInfo , err := upload .HandleUploadChunks (fileUploadArg .FileParam , fileUploadArg .UploadId , * fileUploadArg .ChunkInfo , fileUploadArg .Ranges )
573
+
574
+ if err != nil {
575
+ return nil , err
576
+ }
577
+
578
+ if fileInfo == nil {
579
+ return common .ToBytes (& upload.FileUploadSucced {Success : true }), nil
580
+ }
581
+
582
+ if ! ok {
583
+ return common .ToBytes (fileInfo ), nil // frontend ignored
584
+ }
585
+
586
+ klog .Infof ("Cloud uploadChunks, phase done, tempPath: %s, data: %s" , fileInfo .UploadTempPath , common .ToJson (fileInfo ))
587
+
588
+ var uploadTempPath = fileInfo .UploadTempPath
589
+ if ! strings .HasSuffix (uploadTempPath , "/" ) {
590
+ uploadTempPath = uploadTempPath + "/"
591
+ }
592
+ var srcParam = & models.FileParam {}
593
+ srcParam .GetFileParam (uploadTempPath )
594
+ srcParam .Path = srcParam .Path + fileInfo .Id
595
+
596
+ var dstParam = fileUploadArg .FileParam
597
+
598
+ uploadCopyParam , err := s .service .CreateUploadParam (srcParam , dstParam , fileInfo .Name , fileInfo .FileInfo .FileRelativePath )
599
+ if err != nil {
600
+ return nil , err
601
+ }
602
+
603
+ klog .Infof ("Cloud uploadChunks, uploadToCloud param: %s" , common .ToJson (uploadCopyParam ))
604
+
605
+ var task = tasks .TaskManager .CreateTask (uploadCopyParam )
606
+ if err = task .Execute (task .UploadToCloud ); err != nil {
607
+ klog .Errorf ("Cloud uploadChunks, execute uploadToCloud error: %v" , err )
608
+ return nil , err
609
+ }
610
+
611
+ taskId = task .Id ()
612
+
613
+ klog .Infof ("Cloud uploadChunks, uploadToCloud waiting for execute, taskId: %s" , taskId )
614
+
615
+ return common .ToBytes (
616
+ & upload.FileUploadSucced {
617
+ Success : true ,
618
+ IsCloud : true ,
619
+ TaskId : taskId ,
620
+ Size : fileInfo .Size ,
621
+ State : common .Pending ,
622
+ }), nil
552
623
}
0 commit comments