我们从头开始使用文件 api 构建了一个 HTML5 上传器,没有外部库,它工作正常,直到我们尝试上传大于 150MB 的文件。此时我们意识到我们需要将文件作为块上传。
Javascript 方面正在由拆分文件和上传的其他人进行排序。我正在处理 PHP 方面的工作,需要知道我需要查看什么来确定如何重新加入这些块。
我需要修改每个块的标题吗?
在等待下一个时我应该如何排队?
我们在做这个很长的路要走吗?
在我看来,您需要与执行 javascript 方面的 gui 交谈,或者至少从他那里获取完成的脚本并查看代码,很可能块号将在请求的标头之一中发送。
由于您将在不同的 php 脚本中接收块,我建议您将它们存储在数据库或文件系统中,文件系统会有点困难,因为您还需要添加块编号,如果您真的想去文件系统路径 我建议您将它们存储在一个文件夹中,该文件夹以文件名作为文件名,将块作为 0...chunk_count-1 作为该文件夹内的文件。
您还应该通过标头接收块的总数,并在上传后比较您拥有的块数。当你拥有所有的块时,只需按照它们的块 ID 的顺序组装它们。如果您为此使用文件系统,则应注意所有文件实际上都已完全写入(通常如果总大小与原始大小匹配)。数据库使这变得更加简单,因为当您拥有所有数据时,您可以在其中插入一行。
确保所有文件都已完全写入的文件系统方法的解决方法是将它们写入不同的文件夹,并在完成写入后将它们移动到目标文件夹。两个文件夹应位于同一文件系统上,因此移动不会改为生成副本+删除。