package caddyhugo import ( "fmt" "image" "io" "net/http" "path" "strings" "git.stephensearles.com/stephen/caddy-hugo2/media" ) func (ch *CaddyHugo) uploadMedia(w http.ResponseWriter, r *http.Request) (int, error) { if ch.Media == nil { http.NotFound(w, r) return 404, nil } mr, err := r.MultipartReader() if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return 400, nil } for { part, err := mr.NextPart() if err == io.EOF { break } if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return 400, nil } name := part.FileName() if name != "" { err = ch.Media.ReceiveNewMedia(name, part) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return 500, nil } } } return 200, nil } func (ch *CaddyHugo) serveMediaPage(w http.ResponseWriter, r *http.Request) (int, error) { if ch.Media == nil { http.NotFound(w, r) return 404, nil } io.WriteString(w, `
`) io.WriteString(w, UploadPage("media")) io.WriteString(w, `
`) if ch.Media != nil { media, err := ch.Media.Walk() if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return 500, nil } for _, m := range media { src, size, err := ch.Media.ThumbMax(*m, 100) if err != nil { fmt.Fprintf(w, `
error rendering %q: %v
`, m.Name, err) continue } fmt.Fprintf(w, `

📋
`, size.Dx(), size.Dy(), src, m.Name, src) } } io.WriteString(w, ``) return 200, nil } func (ch *CaddyHugo) serveMedia(w http.ResponseWriter, r *http.Request) (int, error) { if ch.Media == nil { http.NotFound(w, r) return 404, nil } segs := strings.Split(r.URL.Path, "/") name := segs[len(segs)-1] // the last segment is the filename size := image.Rectangle{} m := ch.Media.ByName(name) if len(segs) >= 4 && len(segs) > 2 { var err error size, err = media.ParseSizeString(segs[len(segs)-2], m.Size) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return 400, nil } } file, err := ch.Media.Thumb(*m, size) if err != nil { http.Error(w, fmt.Sprintf("unable to load thumb"), http.StatusInternalServerError) return 500, nil } if file[0] == '/' { file = file[1:] } file = path.Join(ch.Media.ThumbDir, file) http.ServeFile(w, r, file) return 200, nil }