github.com/cyverse/go-irodsclient@v0.13.2/examples/upload/upload.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "os" 7 "path/filepath" 8 "time" 9 10 "github.com/cyverse/go-irodsclient/fs" 11 "github.com/cyverse/go-irodsclient/irods/types" 12 "github.com/cyverse/go-irodsclient/irods/util" 13 14 log "github.com/sirupsen/logrus" 15 ) 16 17 func main() { 18 logger := log.WithFields(log.Fields{ 19 "package": "main", 20 "function": "main", 21 }) 22 23 // Parse cli parameters 24 flag.Parse() 25 args := flag.Args() 26 27 if len(args) != 2 { 28 fmt.Fprintf(os.Stderr, "Give a local source path and an iRODS destination path!\n") 29 os.Exit(1) 30 } 31 32 srcPath := args[0] 33 destPath := args[1] 34 35 // Read account configuration from YAML file 36 yaml, err := os.ReadFile("account.yml") 37 if err != nil { 38 logger.Error(err) 39 panic(err) 40 } 41 42 account, err := types.CreateIRODSAccountFromYAML(yaml) 43 if err != nil { 44 logger.Error(err) 45 panic(err) 46 } 47 48 logger.Debugf("Account : %v", account.MaskSensitiveData()) 49 50 // Create a file system 51 appName := "upload" 52 filesystem, err := fs.NewFileSystemWithDefault(account, appName) 53 if err != nil { 54 logger.Error(err) 55 panic(err) 56 } 57 58 defer filesystem.Release() 59 60 // convert src path into absolute path 61 srcPath, err = filepath.Abs(srcPath) 62 if err != nil { 63 logger.Error(err) 64 panic(err) 65 } 66 67 fmt.Printf("upload start") 68 69 track := func(processed int64, total int64) { 70 pt := (float64(processed) / float64(total)) * 100 71 fmt.Printf("%d / %d ==> %f%%\n", processed, total, pt) 72 } 73 74 tstart := time.Now() 75 76 err = filesystem.UploadFile(srcPath, destPath, "", false, track) 77 if err != nil { 78 logger.Error(err) 79 panic(err) 80 } 81 82 ttaken := time.Since(tstart) 83 84 fsentry, err := filesystem.Stat(destPath) 85 if err != nil { 86 logger.Error(err) 87 panic(err) 88 } 89 90 if fsentry.Type == fs.FileEntry { 91 fmt.Printf("Successfully uploaded a file %s to %s, size = %d\n", srcPath, destPath, fsentry.Size) 92 } else { 93 // dir 94 srcFileName := util.GetIRODSPathFileName(srcPath) 95 destFilePath := util.MakeIRODSPath(destPath, srcFileName) 96 97 fsentry2, err := filesystem.Stat(destFilePath) 98 if err != nil { 99 logger.Error(err) 100 panic(err) 101 } 102 103 if fsentry2.Type == fs.FileEntry { 104 fmt.Printf("Successfully uploaded a file %s to %s, size = %d\n", srcPath, destFilePath, fsentry2.Size) 105 } else { 106 logger.Errorf("Unkonwn file type - %s", fsentry2.Type) 107 } 108 } 109 110 fmt.Printf("Upload took - %f Sec\n", ttaken.Seconds()) 111 }