shared/storage/file.go (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | package storage
import (
"errors"
"mime"
"os"
"path/filepath"
"time"
)
type File struct {
Path string
FSPath string
LastModified time.Time
Etag string
Title string
Encodings map[string]*os.File
ContentType string
}
var (
ErrEncodingNotFound = errors.New("encoding not found")
)
func NewFile(urlPath string, filename string) (*File, error) {
f, err := os.Open(filename)
if err != nil {
return nil, err
}
stat, err := os.Stat(filename)
if err != nil {
return nil, err
}
file := &File{
Path: urlPath,
FSPath: filename,
LastModified: stat.ModTime(),
Etag: "",
Title: filename,
Encodings: map[string]*os.File{
"identity": f,
},
}
file.ContentType = file.getContentType()
return file, nil
}
func (f *File) AvailableEncodings() []string {
encs := make([]string, 0, len(f.Encodings))
for enc := range f.Encodings {
encs = append(encs, enc)
}
return encs
}
func (f *File) getContentType() string {
ext := filepath.Ext(f.FSPath)
if ext == "" {
ext = ".html"
}
f.ContentType = mime.TypeByExtension(ext)
return f.ContentType
}
|