Exemple #1
0
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
}