目前,我有一个div
个input
字段text
或file
通过jQuery.append()
动态添加。有几个按钮用JavaScript onclick方法来控制它。我有一个“发布”按钮,调用$.ajax()
将输入值发送到我的web2py控制器函数。
js发布代码:
var publish = function(){
//extract element data and classify as image or not
var elem_data = [];
for( var i = 0; i < elem_count; i++ ){
var e = document.getElementById('elem'+i);
elem_data.push({
value: e.value,
image: (e.type == "file")
});
}
//creata data Obj and attach title
var send_data = {
title: document.getElementById('title').value,
body: elem_data
};
//ajax call sending data to default/create
$.ajax({
type: 'POST',
url: 'create',
data: {data: JSON.stringify(send_data)},
success: function(data){
$('#new'+new_count).html(data);
}
});
}
这一切都有效。我注意到的一个奇怪的事情是,如果我document.getElementById().value
其中一个文件输入文件名前缀为C:/ fakepath /
无论如何,表单数据已成功发送到控制器功能(文本显示正确,但文件值仍以伪路径为前缀)。我的问题是如何将文件上传到文件系统和DB的引用?
我在我的控制器函数中尝试了以下操作,但由于某种原因,它会在json.loads()
上抛出预期的字符串或缓冲区。
data = json.loads(request.vars['data'])
for b in data['body']:
if (b['image']):
img = db.image.img.store(b['value'])
db.image.insert(img = img)
用以下代码替换最后两行:
session.flash = b['value']
将C:\fakepath\file.ext
闪烁到屏幕上。有什么想法吗?