我正在尝试使用HTML5 <input type="file"/>
将文件上传到运行Flask的服务器。
有a decent article解释如何执行此操作。但是,它建议使用以下命令获取已发送到服务器的数据:
PHP: $_SERVER['HTTP_X_FILE_NAME'] Rails: request.env['HTTP_X_FILE_NAME'] Django: request.META['HTTP_X_FILE_NAME']
不幸的是,我不知道Flask中的上述内容。根据我的阅读,我试过:
不幸的是,似乎没有按预期工作。
我正在使用Chrome上传文件:
var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload/uri', true);
xhr.send(file);
在Chrome中,在我启动转移后,在开发人员工具中此给定POST的网络传输的标题下,Content-Length
设置为文件的大小上传 - 这表明该文件实际上已被发送。
我想知道如何访问Flask中发送的文件,或者如何更喜欢将HTML5文件发送到服务器。
答案 0 :(得分:1)
你见过update to the article you reference吗?您现在可以使用FormData
,避免以不同于浏览器的方式处理AJAX上传:
引用文章:
var form = document.getElementById('form-id');
var formData = new FormData(form);
这个新的FormData实例是您传递
send()
调用所需的全部内容:
var xhr = new XMLHttpRequest();
// Add any event handlers here...
xhr.open('POST', '/upload/path', true);
xhr.send(formData);
这将发送一个Ajax请求,其中包含表单的所有字段,而不仅仅是文件输入。如果还有文本区域,文本字段,复选框或有什么内容,它们也会被发送。您将收听任何可能收听的事件,例如
onprogress
或onreadystatechange
。