import os, re,asyncfile, jester, asyncdispatch, htmlgen, asyncnet, net, browsers, parseutils, strutils, parseopt2 echo "\"./upload insecure\" to share also subdirectorys" echo "\"./upload 5000\" to serve on port 5000" echo "\"./upload insecure 5000\" to share also subdirectorys and serve on port 5000" var port = 8080 var insecure_world = false var html_temp = "" html_temp.add "" html_temp.add "" html_temp.add "" html_temp.add "

Uploader

" html_temp.add "
" html_temp.add "
" html_temp.add "" html_temp.add "
" html_temp.add "
" html_temp.add "" html_temp.add "
" html_temp.add "
" proc stringToUri(input: string): string = var result = input.replace(re"\(", "%28") result = result.replace(re"%", "%25") result = result.replace(re"\s", "%20") result = result.replace(re"\)", "%29") result = result.replace(re"\,", "%2C") result = result.replace(re"&", "%26") result proc uriToString(input: string): string = var result = input.replace("%28", "(") result = result.replace("%20", " ") result = result.replace("%29", ")") result = result.replace("%2C", ",") result = result.replace("%26", "&") result = result.replace("%25", "%") result proc parseCommArgs()= for kind, key, val in getopt(): case key of "insecure", "-i": insecure_world = true if parseInt(key, port) == 0: discard parseInt(key, port) proc default() = settings: port = Port(port) routes: get "/": var html = html_temp html.add "

Files

" html.add "" for file in walkFiles("*.*"): html.add "" html.add "
" & file & "
" resp(html) post "/upload": var filename = request.formData["file"].fields["filename"] if filename == "": resp "Sorry but you have to choose a file first." else: if (existsFile filename): resp("Sorry but a file with this name already exists!") else: writeFile(filename, request.formData["file"].body) resp("File \"" & filename & "\" is uploaded.Bring me back") get "/@filename": await response.sendHeaders(Http200, {"Content-Type": "application"}.newStringTable()) var filename = @"filename" filename = uriToString(filename) var file = openAsync(filename, fmRead) var data = await file.read(8000) while data != "": await response.client.send(data) data = await file.read(1) file.close() response.client.close() runForever() proc insecure()= settings: port = Port(port) staticDir = "./" routes: get "/": var html = html_temp html.add "

Folder and files

" html.add "" for folder in walkDirRec("./"): html.add "" html.add "
" & folder & "
" resp(html) post "/upload": var filename = request.formData["file"].fields["filename"] if filename == "": resp "Sorry but you have to choose a file first." else: if (existsFile filename): resp("Sorry but a file with this name already exists!") else: writeFile(filename, request.formData["file"].body) resp("File \"" & filename & "\" is uploaded.
Bring me back") runForever() parseCommArgs() openDefaultBrowser("http://localhost:" & intToStr(port)) if insecure_world: insecure() else: default()