gpt4 book ai didi

javascript - 使用 cherrypy 和 JavaScript 的 HTML 进度条

转载 作者:行者123 更新时间:2023-11-27 23:59:47 25 4
gpt4 key购买 nike

您好,我正在尝试开发一个简单的基于 Web 的带有进度条的文件上传表单。我正在使用 cherrypy 3.2 作为服务器,文件正在成功上传。我的问题是进度条出现但在上传过程中未在网络浏览器中更新。我知道函数 prompt() 正在被调用,因为当我在没有先选择文件的情况下单击上传按钮时会显示一个警告框。

我在下面包含了我的代码。如果我遗漏了什么,请告诉我。任何帮助,将不胜感激。谢谢

服务器端:

class filedrop(object):
def index(self):
return open('index.html')
index.exposed = True

def upload_handler(self, myFile, mySize):
fileName = os.path.split(myFile.filename)[1]
chunksize = round(int(mySize)/10)
fo = open('C:/Sprint 16/' + fileName, 'wb')
while True:
data = myFile.file.read(int(chunksize))
if not data:
sys.stderr.write("\n")
break
fo.write(data)
fo.close()
raise cherrypy.HTTPRedirect("/")
upload_handler.exposed = True
cherrypy.quickstart(filedrop())

“index.html”文件

<head><script type="text/javascript" src="/jquery-1.4.2.min.js"></script></head>
<body>
<b>Upload Files To This Directory</b><br><br>
<form id="form" action="upload_handler" method="POST" enctype="multipart/form-data" name="Uform" onsubmit="return prompt()">
<input type="file" name="myFile" id="upFile" /><br />
<input type="submit" value=" Upload"/>
<input type="hidden" name="mySize" id="fileSize"/>
</form> <progress id="progBar" max="100" value="0"></progress>
<script>
function prompt(){
var x=document.forms["Uform"]["myFile"].value;
if(x==null || x==""){
alert("No file chosen. Please go back and try again");
return false;
}
var input = document.getElementById("upFile");
var size = input.files[0].size;
var sizeField = document.getElementById("fileSize");
sizeField.value = size;

var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", updateProgress, false);
xhr.open("POST", "upload_handler");
}
function updateProgress(evt){
if(evt.lengthComputable){
var percentComplete = (evt.loaded / evt.total)*100;
var progressBar = document.getElementById("progBar");
proressbar.value = percentComplete;
}
}
</script>
</body>

最佳答案

这是我的工作...

<head><script type="text/javascript" src="/jquery-1.4.2.min.js"></script></head>
<body>
<b>Upload Files To This Directory</b><br><br>
<!--<form id="form" action="/filedrop/upload_handler" method="POST" enctype="multipart/form-data" name="Uform" onsubmit="return prompt()">-->
<input type="file" name="myFile" id="upFile" /><br />
<input type="submit" value=" Upload" onclick="prompt();"/>
<!-- <input type="hidden" name="mySize" id="fileSize"/>
</form>--> <progress id="progBar" max="100" value="0"></progress>
<script>
function prompt(){
var x=document.getElementById("upFile").value;
if(x==null || x==""){
alert("No file chosen. Please go back and try again");
return false;
}
var input = document.getElementById("upFile");
//var size = input.files[0].size;
//var sizeField = document.getElementById("fileSize");
//sizeField.value = size;

var data = new FormData();
data.append('myFile', document.getElementById("upFile").files[0]);

var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", updateProgress, false);
xhr.open("POST", "upload_handler");
xhr.send(data);
}
function updateProgress(evt){
if(evt.lengthComputable){
var percentComplete = (evt.loaded / evt.total)*100;
var progressBar = document.getElementById("progBar");
progressBar.value = percentComplete;
}
}
</script>
</body>

*.py 文件内容如下:

import cherrypy
import os

class filedrop(object):
def index(self):
return open('index.html')
index.exposed = True

def upload_handler(self, myFile):
fo = open(os.path.dirname(__file__) + "/" + myFile.filename, 'wb')
all_data = bytearray()
while True:
data = myFile.file.read(8192)
all_data += data
if not data:
break
fo.write(all_data)
fo.close()
#raise cherrypy.HTTPRedirect("/")
upload_handler.exposed = True
cherrypy.quickstart(filedrop())

我认为问题在于脚本标签底部的 proressbar 拼写错误,表单正在发布并使您离开提供进度更新的页面,而您并没有真正将文件发送到服务器端。如果您还有其他问题,请告诉我。希望这对您有所帮助!

关于javascript - 使用 cherrypy 和 JavaScript 的 HTML 进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21911058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com