【发布时间】:2015-06-28 13:51:09
【问题描述】:
我已经编写了一个带有上传处理程序的测试龙卷风服务器,按块写入文件。现在我尝试通过请求库将一些文件上传到服务器并得到一个 ConnectionResetError,如果我在没有文件的情况下发出请求,我不会得到这个。
python 3.4,龙卷风 4.1
server.py:
from tornado.ioloop import IOLoop
from tornado.web import Application, RequestHandler, stream_request_body
@stream_request_body
class UploadHandler(RequestHandler):
def prepare(self):
self.file = open('uploaded_file', 'wb')
def data_received(self, chunk):
print(len(chunk))
self.file.write(chunk)
def post(self, *args, **kwargs):
self.file.close()
self.write('UPLOADED')
app = Application([(r'/upload', UploadHandler), ],
debug=True)
if __name__ == '__main__':
app.listen(7777)
IOLoop.current().start()
这是我得到的:
>>> import requests
>>> resp = requests.post('http://localhost:7777/upload', files={'file': open('book.pdf', 'rb')})
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/home/dim/env/lib/python3.4/site-packages/requests/api.py", line 109, in post
return request('post', url, data=data, json=json, **kwargs)
File "/home/dim/env/lib/python3.4/site-packages/requests/api.py", line 50, in request
response = session.request(method=method, url=url, **kwargs)
File "/home/dim/env/lib/python3.4/site-packages/requests/sessions.py", line 465, in request
resp = self.send(prep, **send_kwargs)
File "/home/dim/env/lib/python3.4/site-packages/requests/sessions.py", line 573, in send
r = adapter.send(request, **kwargs)
File "/home/dim/env/lib/python3.4/site-packages/requests/adapters.py", line 415, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
>>> resp = requests.post('http://localhost:7777/upload')
>>> resp.status_code
200
我做错了什么?我读过它是服务器错误。 self.prepare() 完成了,但是 self.data_received() 和 post() 不起作用。
【问题讨论】: