Skip to content

Commit 95f92e4

Browse files
matteosuppofacchinm
authored andcommitted
Feat(file_upload): Create an handler that can program a board via POST
The POST request needs a boad field, a port field and a sketch field which is a file. It returns an error if one of these is missing, or proceeds to save the sketch and program the board. The results of the board programming are sent via websocket as usual. Former-commit-id: 37437f2527fd1e61dde4fc014f3f23308689bb8a [formerly 01fe51e51547860548caafe38e0b3c88864dc3de] Former-commit-id: 37cc6ecf97b3032a7e61b16054c4df3d12c3d4b8
1 parent 0b1ad43 commit 95f92e4

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

conn.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,28 @@ func (c *connection) writer() {
3838
c.ws.Close()
3939
}
4040

41+
func uploadHandler(w http.ResponseWriter, r *http.Request) {
42+
log.Print("Received a upload")
43+
port := r.FormValue("port")
44+
if port == "" {
45+
http.Error(w, "port is required", http.StatusBadRequest)
46+
return
47+
}
48+
board := r.FormValue("board")
49+
if board == "" {
50+
http.Error(w, "board is required", http.StatusBadRequest)
51+
return
52+
}
53+
sketch, header, err := r.FormFile("sketch_hex")
54+
if err != nil {
55+
http.Error(w, err.Error(), http.StatusBadRequest)
56+
}
57+
58+
path, err := saveFileonTempDir(header.Filename, sketch)
59+
60+
go spProgram(port, board, path)
61+
}
62+
4163
func wsHandler(w http.ResponseWriter, r *http.Request) {
4264
log.Print("Started a new websocket handler")
4365
ws, err := websocket.Upgrade(w, r, nil, 1024, 1024)

download.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,34 @@ import (
1212
"strings"
1313
)
1414

15+
func saveFileonTempDir(filename string, sketch io.Reader) (path string, err error) {
16+
// create tmp dir
17+
tmpdir, err := ioutil.TempDir("", "serial-port-json-server")
18+
if err != nil {
19+
return "", errors.New("Could not create temp directory to store downloaded file. Do you have permissions?")
20+
}
21+
22+
filename, _ = filepath.Abs(tmpdir + "/" + filename)
23+
24+
output, err := os.Create(filename)
25+
if err != nil {
26+
log.Println("Error while creating", filename, "-", err)
27+
return filename, err
28+
}
29+
defer output.Close()
30+
31+
n, err := io.Copy(output, sketch)
32+
if err != nil {
33+
log.Println("Error while copying", err)
34+
return filename, err
35+
}
36+
37+
log.Println(n, "bytes saved")
38+
39+
return filename, nil
40+
41+
}
42+
1543
func downloadFromUrl(url string) (filename string, err error) {
1644

1745
// clean up url

0 commit comments

Comments
 (0)