2

所以我有一个文件传输网站,它使用 PHP 和 HTML5 开发。该站点应该处理大量文件传输(100MB - 4GB 文件大小)。HTML5 主要是将文件分割成更小的尺寸。它适用于稳定的连接。

但是,在某些情况下,由于互联网连接突然断开并打开一瞬间,文件上传就被切断了。

我的主要问题是,无论如何在 php 或 html5 / javascript.. 中都可以处理此类问题。例如:如果连接仅中断几秒钟,脚本仍将继续运行,当连接再次打开时,它将继续文件上传?

或者如果这样的事情是不可能的,有没有办法检测到互联网掉线,并显示警报(“互联网掉线”);类似的东西?

谢谢

4

1 回答 1

2

我最近遇到了一个问题,涉及 FTP 上的大型二进制信号文件被丢弃损坏。随后,我们与 FTP 解决方案一起调查了使用基于 Web 的上传的选项,类似于您似乎正在寻找的那种处理方式。最强大的解决方案仍然是使用 rsync 实现和连续校验和。

也就是说,HTML5 API 中似乎直接缺少的选项是能够在块本身中发送块的哈希或校验和,以便透明地完成对数据 blob 已完整接收的验证。

您基本上应该可以通过对切片数据进行一些处理并将其与 blob 结合,然后再发送。

            while( start < SIZE ) {
                var chunk = blob.slice(start, end);
                //var chunkHash = chunk.ComputeHash(); // e.g. CRC32 or Adler
                //chunk = chunkHash + chunk
                uploadFile(chunk);
                start = end;
                end = start + BYTES_PER_CHUNK;
            }

在另一端,您提取前 n 个字节并计算其余部分的哈希值,然后将前 n 个字节与您的数据进行比较。

一些启发灵感的文章: 使用 html5 分块上传文件是一个好地方,我认为处理文件上传 如何快速有效地将文件块(html5 分块的结果)合并到一个文件中

最后,可能值得研究预先存在的库并进行一些“退出”测试以确定最佳性能。http://www.plupload.com/似乎有一些追随者(不附属且未经测试)。

于 2013-07-30T22:47:24.743 回答