You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-library/vendor/github.com/upyun/go-sdk/v3/upyun/fileinfo.go

73 lines
1.7 KiB

package upyun
import (
"net/http"
"strings"
"time"
)
type FileInfo struct {
Name string
Size int64
ContentType string
IsDir bool
IsEmptyDir bool
MD5 string
Time time.Time
Meta map[string]string
/* image information */
ImgType string
ImgWidth int64
ImgHeight int64
ImgFrames int64
}
/*
Content-Type: image/gif
ETag: "dc9ea7257aa6da18e74505259b04a946"
x-upyun-file-type: GIF
x-upyun-height: 379
x-upyun-width: 500
x-upyun-frames: 90
*/
func parseHeaderToFileInfo(header http.Header, getinfo bool) *FileInfo {
fInfo := &FileInfo{}
for k, v := range header {
lk := strings.ToLower(k)
if strings.HasPrefix(lk, "x-upyun-meta-") {
if fInfo.Meta == nil {
fInfo.Meta = make(map[string]string)
}
fInfo.Meta[lk] = v[0]
}
}
if getinfo {
// HTTP HEAD
fInfo.Size = parseStrToInt(header.Get("x-upyun-file-size"))
fInfo.IsDir = header.Get("x-upyun-file-type") == "folder"
fInfo.Time = time.Unix(parseStrToInt(header.Get("x-upyun-file-date")), 0)
fInfo.ContentType = header.Get("Content-Type")
fInfo.MD5 = header.Get("Content-MD5")
} else {
fInfo.Size = parseStrToInt(header.Get("Content-Length"))
fInfo.ContentType = header.Get("Content-Type")
fInfo.MD5 = strings.ReplaceAll(header.Get("Content-Md5"), "\"", "")
if fInfo.MD5 == "" {
fInfo.MD5 = strings.ReplaceAll(header.Get("Etag"), "\"", "")
}
lastM := header.Get("Last-Modified")
t, err := http.ParseTime(lastM)
if err == nil {
fInfo.Time = t
}
fInfo.ImgType = header.Get("x-upyun-file-type")
fInfo.ImgWidth = parseStrToInt(header.Get("x-upyun-width"))
fInfo.ImgHeight = parseStrToInt(header.Get("x-upyun-height"))
fInfo.ImgFrames = parseStrToInt(header.Get("x-upyun-frames"))
}
return fInfo
}