php实现http 206协议,显示/下载mongodb中的mp4文件

当用mongodb的gridfs存文件的时候,迁移和维护起来就方便多了。显示也方便,查出来直接输出(getBytes())二进制文件就好了。但是当文件很大的时候就会有内存不够的问题,设置内存的限制不可取,就算没有限制,加载出来也会很慢。于是分片的下载文件就变得很有用了,http协议中默认就有206这个协议,很好的解决了这个问题。nginx中已经有很好的实现,但是如果你用php来输出mongodb中的进制文件就得自己来实现了。于是我想到的方有如下两个:

方案一

mongodb会把大文件分片保存在chunks中,那我每次只取一部分应该可以解决吧,于是按照这个思路写了一版代码,发现并不理想,火狐浏览器OK,但是chrome却不行。各种折腾依然不行,应该是自己的姿势不对。

方案二

fseek操作文件指针,具体代码如下:

总结一下,两个方案应该都可以得得通,方案一有空再试一下。这里的关键问题还是http 206的理解,以及每次输出文件的起始位置。

你的评论是对我最大的鼓励