【发布时间】:2012-08-02 08:37:09
【问题描述】:
我的应用程序有一个 python (bottle.py) 后端和一个 html/jquery 前端。
我正在使用表单中的“输入”获取文本文件,并在后台使用 python 端的事件处理程序将其上传。然后事件处理程序解析文件(重复调用file.readline())并以json形式返回一些结果。
一切顺利,直到我需要在 python 中解析文件。
这是我的 javascript:
function UploadFile() {
var file = $('#data')[0].files[0];
var formData = new FormData();
formData.append("file", file);
$.ajax({
url: 'plates',
type: 'POST',
data: formData,
cache: false,
contentType: false,
processData: false,
success: function(data){
...
}
});
}
当我在 python 端收到 POST 请求时,我只能使用request.body.read().decode() 读取它。如果我尝试request.files.data.file.read(),我会收到“破管”错误:
socket.error: [Errno 32] Broken pipe
我可以使用request.body.read().decode() 获取文本,将它们保存到文件中,然后加载并解析。但我想避免创建不需要创建的文件,并且想在内存中做所有事情。
为什么request.body.read().decode() 有效而request.files.data.file.read() 无效?
有什么方法可以用我现有的函数解析文件而不将其写入磁盘?
【问题讨论】:
标签: jquery python ajax bottle form-data