Skip to content

Commit 1d99487

Browse files
committed
支持相对路径
1 parent 76b2cc0 commit 1d99487

File tree

2 files changed

+57
-6
lines changed

2 files changed

+57
-6
lines changed

service/s3/s3manager/file_counter.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package s3manager
2+
3+
import "sync/atomic"
4+
5+
type FileCounter struct {
6+
TotalNum int64
7+
SuccessNum int64
8+
FailNum int64
9+
}
10+
11+
func (fc *FileCounter) addTotalNum(num int64) {
12+
atomic.AddInt64(&fc.TotalNum, num)
13+
}
14+
15+
func (fc *FileCounter) addSuccessNum(num int64) {
16+
atomic.AddInt64(&fc.SuccessNum, num)
17+
}
18+
19+
func (fc *FileCounter) addFailNum(num int64) {
20+
atomic.AddInt64(&fc.FailNum, num)
21+
}

service/s3/s3manager/upload.go

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"io"
1111
"log"
1212
"os"
13+
"os/user"
1314
"path/filepath"
1415
"sort"
1516
"strings"
@@ -559,17 +560,21 @@ func (uploader *Uploader) UploadDir(rootDir string, bucket, prefix string) error
559560
if !strings.HasSuffix(prefix, "/") && len(prefix) > 0 {
560561
prefix = prefix + "/"
561562
}
562-
if !strings.HasSuffix(rootDir, "/") && len(rootDir) > 0 {
563-
rootDir = rootDir + "/"
563+
rootDir, err := uploader.toAbs(rootDir)
564+
if err != nil {
565+
return err
564566
}
567+
565568
chFiles := make(chan fileInfoType)
566569
var consumerWgc sync.WaitGroup
570+
var fileCounter FileCounter
567571
for i := 0; i < uploader.opts.Jobs; i++ {
568572
consumerWgc.Add(1)
569573
go func() {
570574
defer consumerWgc.Done()
571575
for file := range chFiles {
572-
uploader.upload(file, consumerWgc)
576+
fileCounter.addTotalNum(1)
577+
uploader.upload(file, &fileCounter)
573578
}
574579
}()
575580
}
@@ -590,9 +595,31 @@ func (uploader *Uploader) UploadDir(rootDir string, bucket, prefix string) error
590595
})
591596
close(chFiles)
592597
consumerWgc.Wait()
598+
fmt.Printf("Done. Total num: %d, success num: %d, fail num: %d \n", fileCounter.TotalNum, fileCounter.SuccessNum, fileCounter.FailNum)
593599
return nil
594600
}
595601

602+
func (uploader *Uploader) toAbs(rootDir string) (string, error) {
603+
if rootDir == "~" || strings.HasPrefix(rootDir, "~/") {
604+
currentUser, err := user.Current()
605+
if err != nil {
606+
log.Fatalf(err.Error())
607+
return rootDir, err
608+
}
609+
610+
homeDir := currentUser.HomeDir
611+
rootDir = strings.Replace(rootDir, "~", homeDir, 1)
612+
}
613+
rootDir, err := filepath.Abs(rootDir)
614+
if err != nil {
615+
return rootDir, err
616+
}
617+
if !strings.HasSuffix(rootDir, "/") && len(rootDir) > 0 {
618+
rootDir = rootDir + "/"
619+
}
620+
return rootDir, nil
621+
}
622+
596623
func (uploader *Uploader) uploadFile(fileIfo fileInfoType, call func(success bool)) {
597624

598625
file, err := os.Open(fileIfo.filePath)
@@ -625,12 +652,15 @@ func makeObjectName(RootDir, Prefix, filePath string) string {
625652
objectName := Prefix + resDir
626653
return objectName
627654
}
628-
func (uploader *Uploader) upload(file fileInfoType, consumerWgc sync.WaitGroup) {
655+
656+
func (uploader *Uploader) upload(file fileInfoType, fileCounter *FileCounter) {
629657
uploader.uploadFile(file, func(success bool) {
630-
consumerWgc.Done()
631-
//completed.Inc()
632658
if success {
659+
fileCounter.addSuccessNum(1)
633660
fmt.Println(fmt.Sprintf("%s successfully uploaded ", file.objectKey))
661+
} else {
662+
fileCounter.addFailNum(1)
663+
fmt.Println(fmt.Sprintf("%s upload failed", file.objectKey))
634664
}
635665
})
636666
}

0 commit comments

Comments
 (0)