func listDir(name string, ossClient *oss.Client, bucket string) []fuse.DirEntry { marker := "" result := make([]fuse.DirEntry, 0) for { if name != "" && name[len(name)-1:] != "/" { name = name + "/" } log.Printf("bucket:%s, marker:%s, name:%s, slash:%si \n", bucket, marker, name, "/") rst, err := ossClient.ListBucket(bucket, marker, name, "/") log.Printf("Result len is:%d \n", len(rst.Objects)) if err != nil { return nil } marker = rst.NextMarker for _, prefix := range rst.Prefixes { arrays := strings.Split(prefix[:len(prefix)-1], "/") dirEntry := fuse.DirEntry{Name: arrays[len(arrays)-1], Mode: fuse.S_IFDIR} result = append(result, dirEntry) } for _, obj := range rst.Objects { if obj.Key[len(obj.Key)-1:] != "/" { arrays := strings.Split(obj.Key, "/") //file system only need the last item dirEntry := fuse.DirEntry{Name: arrays[len(arrays)-1], Mode: fuse.S_IFREG} result = append(result, dirEntry) } } if marker == "" { log.Printf("let's break out \n", marker) break } } return result }
func CheckGzFile(fileName string, ossClient *oss.Client, bucket string) ([]string, error) { marker := "" errFiles := make([]string, 0) for { rst, err := ossClient.ListBucket(bucket, marker, fileName, "/") if err != nil { log.Printf("err;%s \n", err) return nil, nil } marker = rst.NextMarker if err != nil { log.Printf("err!:%s \n", err) return nil, err } for _, o := range rst.Objects { if err := func() error { _, readerCloser, err := ossClient.GetObject(bucket, o.Key) gzReader, err := gzip.NewReader(readerCloser) defer readerCloser.Close() defer gzReader.Close() if err != nil { log.Printf("new gzreader failed !%s \n", err) return err } if err != nil { log.Printf("GetObject failed !%s \n", err) return err } written, err := io.Copy(ioutil.Discard, gzReader) if err != nil { log.Printf("Have found one error file !so we mark it!written is %d \n", written) errFiles = append(errFiles, o.Key) return err } return nil }(); err != nil { log.Printf("oss get and checked failed!err:%s o is %s\n", err, o) } } if marker == "" { break } } return errFiles, nil }