2012-04-06 83 views
1

我在Mongodb中使用php存储了超过250MB的压缩文件。但我无法找回它。它只显示我“0”号码。以下是我的代码。使用PHP从Mongodb下载大文件

$id = $_GET['id']; 
require 'dbconnection.php'; 


$mongo = DBConnection::instantiate(); 
$gridFS = $mongo->database->getGridFS(); 

$object = $gridFS->findOne(array('_id' => new MongoId($id))); 
header("Content-Transfer-Encoding: binary"); 
header('Content-type: '.$object->file['filetype']); 
header('Expires: 0'); 


header("Content-disposition: attachment; filename=".$object->file['filename']); 
//header('Content-name: '.$object->file['filename']); 
    header('Content-Type:application-x/force-download'); 
echo $object->getBytes(); 

检查它。这适用于小于100MB的文件。

+1

它最有可能与使用所有可用内存有关。 – 2012-04-06 10:52:04

回答

2

阅读文档,http://php.net/manual/en/mongogridfsfile.getbytes.php

警告:这将文件加载到内存中。如果文件比你的记忆大 ,这会造成问题!

那么你就需要大文件存储的块,然后通过循环和回声块,我搜罗谷歌和发现这个(3显示了如何访问基于块的文件):

http://blog.hardkap.com/index.php/posts/00069/MongoDB---GridFS

+0

对不起,我从上面的链接。上传的254 MB文件创建了26 MB的块大小。在检索文件时,它会逐个获取块并下载它。我不认为它会从大块到内存中获得整个254MB,然后下载它。 – 2012-04-10 08:00:50