我正在尝试将文件上传到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来完全理解我如何将这些应用到我的需要。
非常感谢帮助一个简单的解决方案。
答案 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!");
});
});
您只需要在发布请求路径中包含该类。 希望这有帮助!