我已经看过所有上传进度条插件,小部件等等 - 它们都很糟糕。它们要么太笨重,代码太多无用,要么无效。
我想知道的是我可以在哪里阅读如何显示简单的上传进度指示器。大多数浏览器下面都有一个状态进度条,但在与客户打交道时使用它不是很专业。
浏览器是如何做到的?我想知道浏览器如何工作的内部结构,用于指示上传内容的状态,这样我可以使用PHP& jquery的。
感谢。
答案 0 :(得分:5)
由于您要使用PHP,我将从uploadprogress extension开始(默认情况下,PHP不会为您提供有关上传完成之前的任何数据;此扩展提供此类服务器端功能) 。请注意,它需要PHP 5.2 + ,并且可能对配置选项很挑剔。另请参阅其commentary and demo和troubleshooting hints)。 PHP文档中提供的简短概述comments。
使用扩展程序,您可以获得有关上传的统计信息;然后你可以通过AJAX轮询服务器并更新某种进度条。
更具体一点:
(哦,顺便说一句,检查PHP的upload_max_filesize和post_max_size设置,因为两者都限制了最大上传大小)
答案 1 :(得分:2)
没有可靠方法来获取使用JavaScript上传文件的进度。许多浏览器都缺少对XMLHttpRequest upload.onprogress
事件的支持,即使使用HTML5,您也不可避免地需要转向Flash或其他文件上传方法。
在询问this question后,我最终决定使用plupload来满足上传需求。
答案 2 :(得分:1)
Javascript/Ecmascript
无法解决原生浏览器功能(使用C/C++
主要与访问OS APIs
套接字的TCP/UDP
一起使用。
要显示JS
的进度条,您需要服务器反馈。例如,可以使用polling
之类的服务器HTML5 WebSockets
来完成。
但是在这一点上,它就像浏览器构建进度条那样准确。它可能会改为fake
。
要获得准确的结果,您需要持续连接。您可以gild
和Flash
客户端 - 服务器请求延迟,但它仍然存在。我不确切知道{{1}}如何处理这个问题,但我想它也没有面向连接的流(如果我在这里错了,请纠正我)。
答案 3 :(得分:1)
我知道这不是你想要的,但我最近一直在使用plupload进行上传,看起来相当不错,再也不依赖flash或html5
示例:
uploader.start();
附加到uploader.start();
挂钩。如果你遇到问题就值得在plupload网站上的论坛上提问,他们很擅长回答它们!
$(function(){
//plupload
var uploader = new plupload.Uploader({
runtimes : 'gears,html5,flash',
browse_button : 'pickfiles',
container : 'form_2',
max_file_size : '10mb',
url : '<?php echo SITE_ROOT ?>plupload/upload.php',
//resize : {width : 320, height : 240, quality : 90},
flash_swf_url : '<?php echo SITE_ROOT ?>plupload/js/plupload.flash.swf',
filters : [
{title : "Image files", extensions : "jpg,gif,png"}
]
});
uploader.init();
uploader.bind('FilesAdded', function(up, files) {
uploader.start();
});
uploader.bind('UploadProgress', function(up, file) {
if(file.percent < 100 && file.percent >= 1){
$('#progress_bar div').css('width', file.percent+'%');
}
else{
$('#progress_bar').fadeOut(600);
}
});