我想知道我接收上传进度指示的解决方案是否有效,如果有可能,我会以正确的方式进行吗?它不一定非常准确,我只想要一个旋转的动画图标。
1)在上传表格页面上////////
Submit upload form & files to processing page.
2)在处理页面上/////////
For Each file In myFileArray Then
' Save the file
' Add 1 to a cookie called progressReport
Next
3)在上传表单页面上///////
checkTimer = window.setInterval(function () {
var cookieContents = $.cookie('progressReport');
if (cookieContents != "")
$('#uploadProgress').html(cookieContents + ' files uploaded');
}, 2000);
----更新----
由于以下答案,我无法做到这一点,因为在页面完成处理之前cookie不会被写入 - 这意味着用户在完成之前不会得到任何反馈。没用!
我改变了我的计划。这适合我的应用,可能不适合我。
1)对创建唯一ID的服务器页面和名为“唯一ID”的文件夹进行AJAX调用。完成后,将ID作为响应发回,在上传表单中为隐藏输入添加唯一ID。
2)用户提交文件,检查ID存在于隐藏输入中,然后发布到隐藏的iFrame。提交时,每1-5秒对另一个服务器页面进行一次AJAX调用,检查该文件夹中有多少文件,将数量作为响应发送回来,更新进度面板。
答案 0 :(得分:1)
它不起作用,因为:
For Each file In myFileArray Then
' Save the file
' Add 1 to a cookie called progressReport
Next
在完成所有文件之前,不会将cookie写入浏览器。
您需要设计一种方法,从客户端逐个开始上传这些文件。您的处理页面只收到一个文件;递增cookie中的值并完成响应。换句话说,您的处理页面最终被n个文件调用n次。您的javascript代码每2秒钟继续读取cookie并显示上次响应更新的值。
答案 1 :(得分:1)
这是可能的,但使用cookie是一种奇怪的方式。如果进度存储在服务器端,那么您应该只通过ajax请求更新客户端。绝对可以使用cookie,但似乎没必要。如果您希望客户端更新某个请求(例如,已完成第一阶段,然后两阶段,直到它最终完成),那么您应该查看“长轮询”作为替代方案。或某些推送系统。
要上传文件,您可以找到一些显示进度的示例。如果您愿意,HTML5已修改XMLHttpRequest Level 2,以便更轻松地管理上传进度等内容。