如何在不使用表单的情况下手动将图像上传到web2py文件系统?

时间:2015-02-26 22:22:22

标签: javascript jquery ajax file-upload web2py

目前,我有一个divinput字段textfile通过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闪烁到屏幕上。有什么想法吗?

0 个答案:

没有答案