我想要一个简单的网页,用户可以在上面上传文件。什么是最简单的方法。
我知道如何开始SimpleHTTPServer
,但我不知道如何使用SimpleHTTPServer
. 我什至不知道这是否可能。
我找到了一些使用 cgi 上传文件的代码,但如果我在命令行中执行此代码,它只会在屏幕上打印我的 HTML 代码。
我想要一个简单的网页,用户可以在上面上传文件。什么是最简单的方法。
我知道如何开始SimpleHTTPServer
,但我不知道如何使用SimpleHTTPServer
. 我什至不知道这是否可能。
我找到了一些使用 cgi 上传文件的代码,但如果我在命令行中执行此代码,它只会在屏幕上打印我的 HTML 代码。
我还是 Python 新手,并尝试使用您添加到帖子中的相同代码。唯一的问题是它只允许单个文件上传。我想一次上传多个文件。
使用此处找到的仍然可用的代码,您可以将deal_post_data
方法替换为以下内容:
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD':'POST'})
self.send_response(200)
self.end_headers()
saved_fns = ""
try:
if isinstance(form['file'], list):
for f in form['file']:
print f.filename
saved_fns = saved_fns + ", " + f.filename
self.save_file(f)
self.wfile.write(f.value)
else:
f = form['file']
self.save_file(f)
saved_fns = saved_fns + f.filename
self.wfile.write(f.value)
return (True, "File(s) '%s' upload success!" % saved_fns)
except IOError:
return (False, "Can't create file to write, do you have permission to write?")
然后添加以下函数来保存上传的文件:
def save_file(self, file):
outpath = os.path.join("", file.filename)
with open(outpath, 'wb') as fout:
shutil.copyfileobj(file.file, fout, 100000)
multiple
最后,更改 html 表单以允许使用插入的 HTML 中的标记一次上传多个文件。
我刚刚完成了测试,它工作正常。
希望对您有所帮助
是的,SimpleHTTPServer 可以使用正确的请求处理程序接收 http 上传。
基本上,您需要定义一个 do_POST 方法,其中表单或类似的东西上传数据。然后从 self.rfile 中读取上传。
class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
# ...
def do_POST(self):
for line in self.rfile:
# do something with the line
print line
当然,如果您想从浏览器上传,则需要在某处发布到 http 服务器的表单:
<form enctype="multipart/form-data" method="post" action="http://hostname.of.server:8080/">
<input name="file" type="file"/>
<input type="submit" value="upload"/>
</form>
可以在作为问题评论发布的链接中找到更多详细信息,特别是如何从表单数据中解析原始数据。