如何通过AJAX在tornadoweb中上传multipart/form-data并启用XSRF
我正在尝试通过POST HTTP请求上传文件,同时启用了XSRF保护,使用的是AJAX请求,但每次都会遇到这个问题:
WARNING:root:403 POST /path/to/uploader/ (127.0.0.1): '_xsrf' argument missing from POST
我检查了请求的数据:
_xsrf=01f86a98fe2346f9baec589dc8af3027&id=2
从我看到的情况来看,我确实把_xsrf发送给了处理程序,但它找不到这个参数。
如果我禁用multipart/form-data作为内容类型,问题就会消失,但self.request.files也会变成空的。
有没有人知道该怎么解决这个问题?
1 个回答
1
如果你能把你表单的代码也贴上来,可能会更有帮助。
你需要把这个输出放在你的 <form>
标签里(这个标签是在 tornado.web.RequestHandler.get()
里生成的):
self.xsrf_form_html()
如果输入框的名字叫做 upload_file,你可以在处理 POST 请求的处理器里这样做:
file = self.request.files['upload_file'][0]
uploaded_content_type = file['content_type']
uploaded_filename = file['filename']
local_file_path = '/some/path/on/server/uploaded.file'
output_file = open(local_file_path, 'w')
output_file.write(file['body'])
output_file.close()