13

我正在尝试让 HTML5 上传正常工作。到目前为止,我的工作正常,完全没有问题。我遇到的唯一问题是这样的(仅限 Firefox 浏览器 - Chrome 运行良好):

  1. 加载页面
  2. 尝试上传一个非常大的文件(超过 1GB)
  3. 上传需要很长时间才能开始,然后进度全部搞砸了,似乎两次上传文件

如果在第 1 步和第 2 步之间我上传了一个较小的文件,则大文件开始正确上传,并有良好的进度指示。

要体验这一点,您只需在以下演示页面上尝试上述步骤:http: //exposureroom.biz/upload.aspx。演示页面来自一个众所周知的 HTML5 上传示例:http: //www.matlus.com/html5-file-upload-with-progress/。我不是自己写的,但它的行为与我的脚本相同,并且可以访问。

这是浏览器错误吗?有没有人遇到过这个?

谢谢

4

3 回答 3

12

I don't think this is a browser bug, but rather a bug in the upload program. I tested with uploading a 1GB and 2GB file and the upload started right away without waiting at all.

Make sure your test is valid but I found the following unexpected behavior.

case 1:
1. begin upload 1G file
2. upload started normally and progress is normal
3. before completing upload, click on Browse and upload a 2G file
4. upload started normally and progress is messed up. showing negative speed and stuff.

case 2:
1. begin upload 2G file
2. upload started normally and progress is normal
3. before completing upload, click on Browse and upload a 1G file
4. upload started normally and progress is messed up. showing negative speed and stuff.

case 3:
1. begin upload a 1G file
2. upload started normally and progress is normal.
3. start a new tab and begin upload a 2G file
4. upload started normally and progress is normal.

looks like your program is not handling the first two test cases, it doesn't look like a browser bug.

before disabling the upload button once file begins, try to find out why "cancel" upload is not working (if you have implemented it). it looks like there are some success to cancel file upload wtih html5 on client side.

于 2012-04-18T07:00:45.820 回答
2

这不是 Firefox 中的错误,这是您的程序中的错误。在 Mac 上重现了 @Ray Cheng 在 FF 11.0 和 Chrome 18.0.1025.151 中的行为。没有在任一浏览器中重现 OP 的问题,但我怀疑这是由于程序中的反馈中断导致对正在发生的事情的误解。

Ray 的测试显然失败了,因为第二个文件的上传不会取消第一个文件的上传,并且两次上传正在更新相同的进度条并使用一些相同的值(例如,最后一个上传文件的文件大小)和一些唯一值(例如,此特定上传完成的字节数)。或类似的东西。我没有深入研究代码,但我确实发现了这一点(注意这些变量在全局XMLHttpRequest范围内,但由执行上传的对象生成的事件更新):

  var bytesUploaded = 0;
  var bytesTotal = 0;
  var previousBytesLoaded = 0;
  var intervalTimer = 0;

当前系统的一个明显问题是,如果您开始上传大文件,然后开始上传小文件,则在小文件上传完成后,您会得到如下所示的荒谬反馈,更不用说第一个文件上传失败了。(注意上传文件的大小和百分比与上传文件的大小相比。)

截屏

首先,我建议在上传过程中禁用浏览/文件选择按钮,直到您解决这些其他问题。

于 2012-04-22T04:56:06.153 回答
0

我为你的问题找到了解决方案。要上传大文件,您必须使用 file api slice 调用来处理文件并处理请求,您必须使用 webworkers 以获得更高的计算性能。

于 2012-08-06T11:04:19.267 回答