七牛move资源管理接口go多线程实现。

package mainimport ()var c = make(chan int, 10)func main() {flag.Parse()if len(flag.Args()) != 5 {fmt.Println(“input AK Sk bucket prefix marker “)fmt.Println(” AK Sk test upload/ marker “)os.Exit(1)}mac := &digest.Mac{AccessKey: flag.Arg(0),SecretKey: []byte(flag.Arg(1)),}rsfClient := rsf.New(mac)rsClient := rs.New(mac)listAll(nil, rsfClient, rsClient, flag.Arg(2), flag.Arg(3), flag.Arg(4))}func listAll(l rpc.Logger, rsfClient rsf.Client, rsClient rs.Client, bucketName string, prefix string, marker string) {var entries []rsf.ListItemvar err errorvar limit = 10for err == nil {var entriesToMove []rsf.ListItementries, marker, err = rsfClient.ListPrefix(l, bucketName, prefix, marker, limit)for _, item := range entries {//处理 itemlog.Print(“item:”, item)if !strings.HasPrefix(item.Key, “upload/”) {entriesToMove = append(entriesToMove, item)}}glog.Infof(“%s”, marker)glog.Flush()fmt.Println(“the log dir is ” + os.TempDir())go move(rsClient, entriesToMove, bucketName)//filewrite(marker)<-c}if err != io.EOF {//非预期的错误log.Print(“listAll failed:”, err)}}func move(rsClient rs.Client, items []rsf.ListItem, bucketName string) {entryParis := make([]rs.EntryPathPair, len(items))for i, item := range items {entryParis[i] = rs.EntryPathPair{Src: rs.EntryPath{Bucket: bucketName,Key: item.Key,},Dest: rs.EntryPath{Bucket: bucketName,Key: “upload/” + item.Key,},}}batchMoveRets, err := rsClient.BatchMove(nil, entryParis)if err != nil {//产生错误log.Println(“rs.BatchMove failed:”, err)c <- 0return}for _, item := range batchMoveRets {//遍历每个操作的返回结果log.Println(item.Code, item.Error)if item.Error != “” {glog.Errorf(“s%”, item.Error)glog.Flush()fmt.Println(“the log dir is ” + os.TempDir())}}c <- 0}func filewrite(marker1 string) {userFile := “move.txt”if isDirExists(userFile) {fout, err := os.Open(userFile)defer fout.Close()if err != nil {fmt.Println(userFile, err)return}for i := 0; i < 3; i++ {fout.WriteString(marker1 + “\n”)}} else {fout, err := os.Create(userFile)defer fout.Close()if err != nil {fmt.Println(userFile, err)return}for i := 0; i < 3; i++ {fout.WriteString(marker1 + “\n”)}}}func isDirExists(path string) bool {s := pa()fi, err := os.Stat(s + “/” + path)fmt.Println(s)if err != nil {fmt.Println(“exist”)return os.IsExist(err)} else {return fi.IsDir()fmt.Println(” no exist”)}panic(“not reached”)}func pa() string {currentDir, err := os.Getwd()if err != nil {fmt.Println(err)return currentDir}return currentDir}

,每个人的生命都是可以绽放美丽,只要你珍惜。

七牛move资源管理接口go多线程实现。

相关文章:

你感兴趣的文章:

标签云: