【发布时间】:2014-11-18 14:13:03
【问题描述】:
我允许用户上传 image/doc 文件,为此我正在使用 MongoDB GridFS 。我可以上传有限大小的images, doc files and pdf(大约5 MB)并根据需要存储(单个条目),然后用于获取数据并在前端显示。
上传文件的代码如下
$conn = new MongoClient();
$db = $conn->selectDB('mydb');
$gridfs = $db->getGridFS('uploads');
$ObjId = new MongoId();
$uniqId = (string)$ObjId;
$uploadedIds = array();
foreach ($_FILES as $file) {
$id = $gridfs->storeFile($file['tmp_name'], array("metadata" => array(
'filename' => $file['name'],
'type' => $file['type'],
"id"=> 2,
"parentId" => "1",
"name" => "Employee Reference",
"title" => "Employee Reference",
"isFolder" => 1
)));
$id = $gridfs->storeFile($file['tmp_name'], array(
'_id' => $ObjId,
"id" => $uniqId,
'filename' => $file['name'],
'type' => $file['type'],
"parentId" => "10",
"title" => $file['name'],
isFolder" => 0
));
}
$conn->close();
但是当我尝试上传大小约为8 MB 的PDF 时,它会以以下格式存储数据。
{
"_id" : ObjectId("54226f4c920662240a000080"),
"filename" : "blob",
"type" : "application/octet-stream",
"title" : "blob",
"uploadDate" : ISODate("2014-09-24T07:14:20.000Z"),
"length" : 338277,
"chunkSize" : 261120,
"md5" : "d4f9269491c30a0ab086b3bab02c81ee"
}
正如您在上面看到的,文件根据length 进行划分,对于单个PDF,它会插入8 周围的条目。
如何将大文件的数据合二为一,并在前端显示文件名和其他详细信息?
谢谢。
【问题讨论】:
-
你用的是什么库?无论您是使用库还是单独使用 PHP 驱动程序,共享负责存储文件的代码的 sn-p 都会很有帮助。 “单项”很奇怪,因为默认的块大小是 256k。此外,考虑到 GridFS 的工作方式,即使是最小的文件也将包含两个文档:
fs.files和fs.chunks各一个(注意:fs可以自定义)。 -
@jmikola,我已经添加了上传代码。
fs.file和fs.chunks没问题,但fs.files有多个插入条目。