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
}