diff options
| author | Xe Iaso <me@xeiaso.net> | 2023-11-11 15:34:05 -0500 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2023-11-11 15:34:05 -0500 |
| commit | c39c71219c1601f092e92cdc460826290eec8d11 (patch) | |
| tree | 2b90f4e8c1b44e8d17f4cdc4a47934972e683996 /cmd | |
| parent | 8e1ff26b3996b72942d49eba18d4c0e6e8328cd6 (diff) | |
| download | x-c39c71219c1601f092e92cdc460826290eec8d11.tar.xz x-c39c71219c1601f092e92cdc460826290eec8d11.zip | |
cmd/xedn: fix
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/xedn/imgoptimize.go | 38 | ||||
| -rw-r--r-- | cmd/xedn/main.go | 9 |
2 files changed, 39 insertions, 8 deletions
diff --git a/cmd/xedn/imgoptimize.go b/cmd/xedn/imgoptimize.go index d1129d1..7ad5ff9 100644 --- a/cmd/xedn/imgoptimize.go +++ b/cmd/xedn/imgoptimize.go @@ -263,25 +263,49 @@ func (iu *ImageUploader) CreateImage(w http.ResponseWriter, r *http.Request) { ctx := r.Context() id := uuid.New().String() - // Ten megabytes should be enough for anybody - reader := http.MaxBytesReader(w, r.Body, 1024*1024*10) + os.MkdirAll(filepath.Join(*dir, "uploud"), 0700) - buf := bytes.NewBuffer(make([]byte, r.ContentLength)) + fout, err := os.Create(filepath.Join(*dir, "uploud", id+".png")) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + slog.Error("cannot create temp file", "err", err) + return + } - if _, err := io.Copy(buf, reader); err != nil { + if n, err := io.Copy(fout, r.Body); err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) slog.Error("cannot copy image to buffer", "err", err) return + } else { + slog.Info("copied image to buffer", "bytes", n, "content-length", r.ContentLength) + } + + if err := fout.Close(); err != nil { + slog.Error("cannot close temp file", "err", err) + return + } + + fin, err := os.Open(filepath.Join(*dir, "uploud", id+".png")) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + slog.Error("cannot open temp file", "err", err) + return } - img, _, err := image.Decode(buf) + img, err := png.Decode(fin) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) slog.Error("cannot decode image", "err", err) return } - directory, err := os.MkdirTemp(*staticDir, "uploud") + if err := fin.Close(); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + slog.Error("cannot close temp file", "err", err) + return + } + + directory, err := os.MkdirTemp(*dir, "uploud") if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) slog.Error("cannot create temp directory", "err", err) @@ -328,7 +352,7 @@ func (iu *ImageUploader) CreateImage(w http.ResponseWriter, r *http.Request) { _, err = s3c.PutObject(ctx, &s3.PutObjectInput{ Body: fin, - Bucket: b2Backend, + Bucket: aws.String("christine-static"), Key: aws.String("xedn/dynamic/" + id + "/" + finfo.Name()), ContentType: aws.String(mimeTypes[filepath.Ext(finfo.Name())]), }) diff --git a/cmd/xedn/main.go b/cmd/xedn/main.go index 124aaf6..9d6cf83 100644 --- a/cmd/xedn/main.go +++ b/cmd/xedn/main.go @@ -167,7 +167,14 @@ func main() { mux.HandleFunc("/metrics", tsweb.VarzHandler) mux.HandleFunc("/xedn/optimize", iu.CreateImage) - go http.ListenAndServe(*metricsAddr, http.HandlerFunc(tsweb.VarzHandler)) + mux.HandleFunc("/", http.FileServer(http.Dir(filepath.Join(*dir, "uploud"))).ServeHTTP) + + go http.ListenAndServe(*metricsAddr, tsweb.StdHandler(tsweb.ReturnHandlerFunc(func(w http.ResponseWriter, r *http.Request) error { + mux.ServeHTTP(w, r) + return nil + }), tsweb.HandlerOptions{ + Logf: log.Printf, + })) } cdn := http.NewServeMux() |
