initial-commit
This commit is contained in:
commit
d94a4cd5eb
1 changed files with 56 additions and 0 deletions
56
cgi-bin/upload.cgi
Executable file
56
cgi-bin/upload.cgi
Executable file
|
@ -0,0 +1,56 @@
|
|||
#!/usr/bin/env python3
|
||||
#
|
||||
# run server with:
|
||||
#
|
||||
# python3 -m http.server --cgi 8000
|
||||
#
|
||||
# upload file with:
|
||||
#
|
||||
# echo foobar | curl -F 'arg=@-;filename=bla.txt' http://127.0.0.1:8000/cgi-bin/upload.cgi
|
||||
#
|
||||
# or:
|
||||
#
|
||||
# curl -F 'arg=@blub/bla.txt' http://127.0.0.1:8000/cgi-bin/upload.cgi
|
||||
|
||||
import cgi
|
||||
from os.path import basename
|
||||
|
||||
print("Content-Type: text/plain")
|
||||
print()
|
||||
|
||||
form = cgi.FieldStorage()
|
||||
|
||||
if "arg" not in form:
|
||||
print("no arg field")
|
||||
exit()
|
||||
|
||||
fileitem = form["arg"]
|
||||
|
||||
if not hasattr(fileitem, "file") or not fileitem.file:
|
||||
print("not a file")
|
||||
exit()
|
||||
|
||||
if not fileitem.filename or fileitem.filename == "-":
|
||||
print("no filename")
|
||||
exit()
|
||||
|
||||
filename = basename(fileitem.filename)
|
||||
if not filename:
|
||||
print("invalid filename")
|
||||
exit()
|
||||
|
||||
try:
|
||||
with open(filename, 'wb') as f:
|
||||
while True:
|
||||
data = fileitem.file.read(4096)
|
||||
if not data:
|
||||
break
|
||||
f.write(data)
|
||||
except PermissionError:
|
||||
print("cannot open file for writing")
|
||||
except IsADirectoryError:
|
||||
print("is a directory")
|
||||
except FileNotFoundError:
|
||||
print("path doesn't exist")
|
||||
else:
|
||||
print("uploaded as %s" % filename)
|
Loading…
Reference in a new issue