如何使用启用的xsrf上传multipart / form-data在tornadoweb中抛出AJAX

时间:2013-02-07 06:57:34

标签: python tornado

我正在尝试通过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作为contentTypem禁用,bug将会消失,self.request.files也是空的。

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分: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()