如果文件太大我不想将它下载到我的服务器然后删除它,我只想告诉用户文件太大。这段代码几乎完成了这一点。如果文件小于 10 mb,则会上传,用户会收到文件已上传的响应。但是如果文件大于 10 mb 用户没有得到任何响应,浏览器只是说它已经失去了与服务器的连接。
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
import cgi
class StoreHandler(BaseHTTPRequestHandler):
def do_POST(self):
if int(self.headers['content-length']) > 10000000:
print "file to big"
self.send_response("file to big")
return
else:
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD':'POST',
'CONTENT_TYPE':self.headers['Content-Type'],
})
filename = form['file'].filename
data = form['file'].file.read()
open("/tmp/%s"%filename, "wb").write(data)
print self.headers['content-length']
self.respond("uploaded %s, thanks")
def do_GET(self):
response = """
<html><body>
<form enctype="multipart/form-data" method="post">
<p>File: <input type="file" name="file"></p>
<p><input type="submit" value="Upload"></p>
</form>
</body></html>
"""
self.respond(response)
def respond(self, response, status=200):
self.send_response(status)
self.send_header("Content-type", "text/html")
self.send_header("Content-length", len(response))
self.end_headers()
self.wfile.write(response)
server = HTTPServer(('', 8080), StoreHandler)
server.serve_forever()