aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoni Sawicki <tenox@google.com>2022-06-21 02:44:48 -0700
committerAntoni Sawicki <tenox@google.com>2022-06-21 02:44:48 -0700
commit20a3c6aed38f4980abbc25794a1e7d9214b937f9 (patch)
tree03e7dab290d3df132e7cecfde090c9779d56a530
parent4f13f64cece7fe5d925b7529bd7bc915a7ca5460 (diff)
downloadwfm-20a3c6aed38f4980abbc25794a1e7d9214b937f9.tar.gz
rate limit uploads, but will it work?
-rw-r--r--fileio.go11
-rw-r--r--wfm.go2
2 files changed, 9 insertions, 4 deletions
diff --git a/fileio.go b/fileio.go
index a4839dd..e3d9cc1 100644
--- a/fileio.go
+++ b/fileio.go
@@ -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
diff --git a/wfm.go b/wfm.go
index de0be94..fa75310 100644
--- a/wfm.go
+++ b/wfm.go
@@ -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")