func()

in oss/lib/stat.go [230:285]


func (sc *StatCommand) objectStat(bucket *oss.Bucket, cloudURL CloudURL) error {
	// acl info
	goar, err := sc.ossGetObjectACLRetry(bucket, cloudURL.object)
	if err != nil {
		return err
	}

	// normal info
	statOptions := []oss.Option{}
	if len(sc.versionId) > 0 {
		statOptions = append(statOptions, oss.VersionId(sc.versionId))
	}
	statOptions = append(statOptions, sc.commonOptions...)

	props, err := sc.command.ossGetObjectStatRetry(bucket, cloudURL.object, statOptions...)
	if err != nil {
		return err
	}

	sortNames := []string{}
	attrMap := map[string]string{}
	maxNameLen := 0
	for name := range props {
		if len(name) > maxNameLen {
			maxNameLen = len(name)
		}

		ln := strings.ToLower(name)
		if ln != strings.ToLower(oss.HTTPHeaderDate) &&
			ln != strings.ToLower(oss.HTTPHeaderOssRequestID) &&
			ln != strings.ToLower(oss.HTTPHeaderServer) &&
			ln != "x-oss-server-time" &&
			ln != "connection" {
			sortNames = append(sortNames, name)
			attrMap[name] = props.Get(name)
		}
	}

	sortNames = append(sortNames, "Owner")
	sortNames = append(sortNames, "ACL")
	attrMap[StatOwner] = goar.Owner.ID
	attrMap[StatACL] = goar.ACL
	if lm, err := time.Parse(http.TimeFormat, attrMap[StatLastModified]); err == nil {
		attrMap[StatLastModified] = fmt.Sprintf("%s", utcToLocalTime(lm.UTC()))
	}

	sort.Strings(sortNames)
	for _, name := range sortNames {
		if strings.ToLower(name) != "etag" {
			fmt.Printf("%-[1]*s: %s\n", maxNameLen+2, name, attrMap[name])
		} else {
			fmt.Printf("%-[1]*s: %s\n", maxNameLen+2, name, strings.Trim(attrMap[name], "\""))
		}
	}
	return nil
}