2

假设我的服务器有 4GB 的内存并且我上传了一个大小为 5GB 的文件。如何使用 gridfs 下载该文件。以下站点声明http://www.php.net/manual/en/mongogridfsfile.getbytes.php 如果您的文件比内存大,那么它就是一个问题,但没有说明解决方案。

任何人都可以对此有任何解决方案。我使用这个演示代码来访问一个文件。

<?php
// Connect to Mongo and set DB and Collection
$mongo = new Mongo();
$db = $mongo->myfiles;

// GridFS
$gridFS = $db->getGridFS();

// Find image to stream
$file = $gridFS->findOne("win.tar");

// Stream image to browser
header("Content-Description: File Transfer");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"win.tar\"");
echo $file->getBytes();
?>
4

2 回答 2

3

从 PHP 驱动程序的 1.3.0 版本开始,您可以使用$MongoGridFSFile->getResource()以 PHP 流的形式访问 GridFS 文件。

使用该方法,您可以迭代地读取数据并将其打印出来,避免服务器上的内存限制。

于 2013-05-05T01:05:18.920 回答
1
  • 只需按块拆分源文件并将有关每个块的元信息保存在 mongodb 中,您的每个块都将是 gridfs 中的普通文件
  • 之后,您有一个元层,其中包含有关源文件的元数据
  • 您还必须解决从 gridfs 反向下载的文件和从块中的复合源文件的问题
  • 你可以根据你的网络速度和宽度限制选择这个块的大小,这个块和gridfs中的块是不同的
于 2013-04-25T20:12:11.833 回答