使用ajax将文件上传到cherrypy服务器

时间:2015-01-04 22:17:36

标签: python file-upload cherrypy

我正在尝试将文件上传到cherrypy服务器,但不会更改显示的页面。 一个简单的警报就足以让我告诉用户上传完成了。

我正在尝试使用简单的文件输入类型和按钮:

<div>
    <label>Upload Sound:</label>
    <input id="pathSound" style="width: 80%" type="file" accept=".mp3"/><br>
    <button id="uploadSound">Upload</button>
</div>

并点击按钮的脚本:

$("#uploadSound").click(function(e) {
    if (document.getElementById("pathSound").value=='') {
        alert("No file selected!");
        e.preventDefault();
        return;
    }
    var cardID = $('#tagID').html();
    var file = document.getElementById("pathSound").files[0];
    alert( "Tag: " + cardID + " File: " + file);

    $.post("/uploadSound", {"cardID": cardID, "myFile": file})
    .done(function(res) {
        alert("File Saved!");
    });
});
在服务器端

到目前为止,我有这个功能,但它永远不会被调用:

import os, os.path
import cherrypy
from cherrypy.process import  plugins

class MagicBoxInterface(object):

    @cherrypy.expose
    def index(self):
        return file('index.html')

    @cherrypy.expose
    def uploadSound(self,  cardID='', myFile=None):
        print 'uploadSound : ',  cardID
        print 'uploadSound : ',  myFile
        return ''

if __name__ == '__main__':
    conf = {
        '/': {
            'tools.sessions.on': True,
            'tools.staticdir.root': os.path.abspath(os.getcwd())
        },
        '/static': {
            'tools.staticdir.on': True,
            'tools.staticdir.dir': './public'
        }
    }
    interface = MagicBoxInterface()
    cherrypy.quickstart(interface, '/', conf)

我找到的所有示例都使用普通帖子并在上传后显示结果页面,但这不是我想要做的!显示的页面不得更改。

另一方面,我不需要考虑大文件,因为它只能处理1-2 MB以下的文件。

我找到了一些使用框架的例子,但我并不熟悉html / javascript来完全理解我如何将这些应用到我的需要。

非常感谢帮助一个简单的解决方案。

1 个答案:

答案 0 :(得分:0)

好的,这样做......

$("#uploadSound").click(function(e) {
    if (document.getElementById("pathSound").value=='') {
        alert("No file selected!");
        e.preventDefault();
        return;
    }
    var cardID = $('#tagID').html();
    var file = document.getElementById("pathSound").files[0];
    alert( "Tag: " + cardID + " File: " + file);

    $.post("/MagicBoxInterface/uploadSound", {"cardID": cardID, "myFile": file})
    .done(function(res) {
        alert("File Saved!");
    });
});

您只需要在发布请求路径中包含该类。 希望这有帮助!