diff options
author | Antoni Sawicki <tenox@google.com> | 2022-06-21 02:44:48 -0700 |
---|---|---|
committer | Antoni Sawicki <tenox@google.com> | 2022-06-21 02:44:48 -0700 |
commit | 20a3c6aed38f4980abbc25794a1e7d9214b937f9 (patch) | |
tree | 03e7dab290d3df132e7cecfde090c9779d56a530 | |
parent | 4f13f64cece7fe5d925b7529bd7bc915a7ca5460 (diff) | |
download | wfm-20a3c6aed38f4980abbc25794a1e7d9214b937f9.tar.gz |
rate limit uploads, but will it work?
-rw-r--r-- | fileio.go | 11 | ||||
-rw-r--r-- | wfm.go | 2 |
2 files changed, 9 insertions, 4 deletions
@@ -115,14 +115,19 @@ func (r *wfmRequest) uploadFile(h *multipart.FileHeader, f multipart.File) { } defer f.Close() - o, err := os.OpenFile(r.uDir+"/"+filepath.Base(h.Filename), os.O_RDWR|os.O_CREATE, 0644) + fi, err := os.OpenFile(r.uDir+"/"+filepath.Base(h.Filename), os.O_RDWR|os.O_CREATE, 0644) if err != nil { htErr(r.w, "unable to write file", err) return } - defer o.Close() + defer fi.Close() + + var w io.Writer = fi + if *rateLim != 0 { + w = ratelimit.Writer(fi, ratelimit.NewBucketWithRate(float64(*rateLim<<20), 1<<10)) + } - oSize, err := io.Copy(o, f) + oSize, err := io.Copy(w, f) if err != nil { htErr(r.w, "uploading file", err) return @@ -34,7 +34,7 @@ var ( aboutRnt = flag.Bool("about_runtime", true, "Display runtime info in About Dialog") showDot = flag.Bool("show_dot", false, "show dot files and folders") listArc = flag.Bool("list_archive_contents", false, "list contents of archives (expensive!)") - rateLim = flag.Int("rate_limit", 0, "rate limit for download in MB/s, 0 no limit") + rateLim = flag.Int("rate_limit", 0, "rate limit for upload/download in MB/s, 0 no limit") wfmPfx = flag.String("prefix", "/", "Default url prefix for WFM access") docSrv = flag.String("doc_srv", "", "Serve regular http files, fsdir:prefix, eg /var/www/:/home/") cacheCtl = flag.String("cache_ctl", "no-cache", "HTTP Header Cache Control") |