为什么浏览器没有文件上传进度条?

12
我想知道为什么没有一个浏览器具备这个简单但必要的功能。我是不是漏了什么?是否存在技术原因?
我已经受够了所有那些javascript/flash/java的hack手段...
8个回答

8
没有技术原因阻止浏览器计算要发送的总字节数,然后跟踪服务器接收了多少字节(感谢Kibbee的评论)。火狐浏览器在0.9版本之前有一个功能完善的上传进度指示器,但是2004年的build破坏了它。
通过阅读Bugzilla更新,似乎这个功能对于开发人员来说并没有足够的用户受益,因此没有得到任何推广。
经常上传非常大文件的用户倾向于使用专门为此目的设计的工具,例如FTP,因此他们不受影响。

因此,浏览器只能猜测从服务器接收了多少数据,而无法确定,因为没有像FTP那样的控制连接。因此,您必须使用AJAX轮询构建自己的“控制连接”... - Egon
客户端知道发送了多少数据,这是与上传进度计有关的部分。如果有些数据丢失了,那对上传进度来说并不是真正相关的。 - Gerald
@Gerald:好观点。因此,浏览器可以显示进度指示器并将其标记为“已发送字节”。在指示器中显示重试次数并每隔几秒钟更新一次,以向用户展示上传速度缓慢的原因是很有用的。 - flamingLogos
2
由于使用TCP,客户端确实知道服务器接收了多少数据。如果客户端从服务器收到一个ACK数据包,这意味着服务器已经接收了该数据包。 - Kibbee
1
谢谢Kibbee,所以我想没有不设置进度条的好理由。 - Egon
@Kibbee:感谢您的评论,您说得完全正确。我已经修改了我的答案并删除了不正确的信息。 - flamingLogos

7

除了flamingLogos的观点之外,你可能在代理后面运行,使用5兆纯净数据只需一秒钟,然后通过56kbit调制解调器发送到服务器。

我认为错误的进度条比没有进度条稍微糟糕一些,对于许多人来说它总是错误的。


这可能就是为什么 sfwupload 对我不起作用的原因......我在代理后面 :-) - Egon

3

3
是的,这很愚蠢,但由于某种原因,浏览器制造商正在忽视它。我强烈反驳大文件用户使用FTP的说法 - 几乎没有人知道这个了,所有常见的Web应用程序都需要HTTP上传视频、音频和图片(例如YouTube)。
讽刺的是,用户参与和媒体是Web 2.0的关键,然而用户参与的主要机制在浏览器中处理得如此之差。
对于Firefox,多年来一直存在着一些bug,例如更好的上传进度显示: https://bugzilla.mozilla.org/show_bug.cgi?id=243468 投票吧! :)
状态栏中现有的进度条已经损坏多年了 - 参见bug 249338 - 它会让你悄悄地中止上传 - 参见bug 432768。

2

无论您是否对此进行“秘密”处理(例如使用隐藏的iframe),您都必须提交表单才能上传文件;从某种意义上说,浏览器自带的进度条(通常在状态栏中)就是文件上传进度条,虽然不完全相同。

alt text

只是您不能轻松地将该数据用于自己的目的,因此您必须使用大量的客户端到服务器的通信技巧来近似它。


重点是,由于文件在客户端上,依赖于客户端-服务器的技巧是愚蠢的。浏览器应该负责跟踪有多少东西正在传输...就像FTP一样,除非我不知道还有其他什么。 - Egon
我忘了,在浏览器从服务器获取响应后状态栏就开始了(至少在Firefox上是这样的)。 - Egon

1

在技术上,你完全可以像下载一样有一个合理的进度指示器。你可以向你最喜欢的浏览器提出这个功能请求。

尽管如此,我认为有很多基于javascript/flash/ajax的上传组件,并不仅仅是为了提供进度条(虽然这是一个好处)。通常是因为它们想要为选择要上传的数据提供更好的用户界面,并且有时在上传之前操作数据。在HTML规范中的基本文件上传功能会产生“浏览...”按钮,弹出文件打开对话框并将原始文件数据作为上传到服务器的数据。


0

Chrome有一个上传进度条,显示加载的百分比。

或者,就像Peuchele所说,Firefox也有一个Addon


它还在吗?我在版本108.0.5359.22(macOS)中再也找不到它了。 - Liam

-1

网络浏览器一直是一个浏览网页的工具。它是一种消费机制。通过同样的门户上传信息的能力有点像是一种黑客行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接