Skip to content

Commit 8ad8b6e

Browse files
committed
adding file upload support
1 parent eb32554 commit 8ad8b6e

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

simplehttpserver.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,38 @@ import (
44
"bytes"
55
"flag"
66
"fmt"
7+
"io/ioutil"
78
"log"
89
"net/http"
910
"net/http/httputil"
11+
"path"
1012
)
1113

1214
type options struct {
1315
ListenAddress string
1416
Folder string
1517
Verbose bool
18+
Upload bool
1619
}
1720

1821
var opts options
1922

2023
func main() {
2124
flag.StringVar(&opts.ListenAddress, "listen", "0.0.0.0:8000", "Address:Port")
2225
flag.StringVar(&opts.Folder, "path", ".", "Folder")
26+
flag.BoolVar(&opts.Upload, "upload", false, "Enable upload via PUT")
2327
flag.BoolVar(&opts.Verbose, "v", false, "Verbose")
28+
2429
flag.Parse()
2530

2631
if flag.NArg() > 0 && opts.Folder == "." {
2732
opts.Folder = flag.Args()[0]
2833
}
2934

3035
log.Printf("Serving %s on http://%s/...", opts.Folder, opts.ListenAddress)
36+
if opts.Upload {
37+
log.Println("Upload enabled")
38+
}
3139
fmt.Println(http.ListenAndServe(opts.ListenAddress, loglayer(http.FileServer(http.Dir(opts.Folder)))))
3240
}
3341

@@ -37,6 +45,18 @@ func loglayer(handler http.Handler) http.Handler {
3745
lrw := newLoggingResponseWriter(w)
3846
handler.ServeHTTP(lrw, r)
3947

48+
// Handles file write if enabled
49+
if opts.Upload && r.Method == http.MethodPut {
50+
data, err := ioutil.ReadAll(r.Body)
51+
if err != nil {
52+
log.Println(err)
53+
}
54+
err = handleUpload(path.Base(r.URL.Path), data)
55+
if err != nil {
56+
log.Println(err)
57+
}
58+
}
59+
4060
if opts.Verbose {
4161
headers := new(bytes.Buffer)
4262
lrw.Header().Write(headers) //nolint
@@ -70,3 +90,7 @@ func (lrw *loggingResponseWriter) WriteHeader(code int) {
7090
lrw.statusCode = code
7191
lrw.ResponseWriter.WriteHeader(code)
7292
}
93+
94+
func handleUpload(file string, data []byte) error {
95+
return ioutil.WriteFile(file, data, 0655)
96+
}

0 commit comments

Comments
 (0)