gpt4 book ai didi

php - 为什么 GridFS 文件名和字节为空?

转载 作者:可可西里 更新时间:2023-11-01 09:37:26 24 4
gpt4 key购买 nike

我已使用以下方法成功将文件添加到 GRIDFS:

 $asset = new Asset();
$asset->setName('Image'.$count);
$asset->setFile($uploadedFile->getPathname());
$dm->persist($asset);
$dm->flush();

然后我尝试使用以下方法打印文件:

$dm = $this->get('doctrine.odm.mongodb.document_manager');
$image = $dm->createQueryBuilder('MyBundle:Asset')
->field('id')->equals($imageID)
->getQuery()
->getSingleResult();
header('Content-type: image/png;');
echo $image->getFile()->getBytes();

但是没有任何显示。所以我这样做:

var_dump($image);

得到如下信息:

object(Main\MyBundle\Document\Asset)#429 (7) {
["id":protected]=>
string(24) "50330286c7e24c7019000004"
["name":protected]=>
string(6) "Image2"
["file":protected]=>
object(Doctrine\MongoDB\GridFSFile)#427 (4) {
["mongoGridFSFile":"Doctrine\MongoDB\GridFSFile":private]=>
object(MongoGridFSFile)#430 (3) {
["file"]=>
array(7) {
["_id"]=>
object(MongoId)#431 (1) {
["$id"]=>
string(24) "50330286c7e24c7019000004"
}
["name"]=>
string(6) "Image2"
["filename"]=>
string(14) "/tmp/phpQ1LCIC"
["uploadDate"]=>
object(MongoDate)#432 (2) {
["sec"]=>
int(1345520262)
["usec"]=>
int(510000)
}
["length"]=>
float(194992)
["chunkSize"]=>
float(262144)
["md5"]=>
string(32) "5bbc9ede74f50f93a3f7d1f7babe3170"
}
["gridfs":protected]=>
object(MongoGridFS)#437 (5) {
["w"]=>
int(1)
["wtimeout"]=>
int(10000)
["chunks"]=>
object(MongoCollection)#438 (2) {
["w"]=>
int(1)
["wtimeout"]=>
int(10000)
}
["filesName":protected]=>
string(12) "assets.files"
["chunksName":protected]=>
string(13) "assets.chunks"
}
["flags"]=>
int(0)
}
["filename":"Doctrine\MongoDB\GridFSFile":private]=>
NULL
["bytes":"Doctrine\MongoDB\GridFSFile":private]=>
NULL
["isDirty":"Doctrine\MongoDB\GridFSFile":private]=>
bool(false)
}
["uploadDate":protected]=>
string(21) "0.51000000 1345520262"
["length":protected]=>
string(6) "194992"
["chunkSize":protected]=>
string(6) "262144"
["md5":protected]=>
string(32) "5bbc9ede74f50f93a3f7d1f7babe3170"
}

为什么文件名和字节为空?

最佳答案

如果您查看 GridFSFile源代码,您会看到 $bytes 仅在覆盖文件内容时使用。 $filename 属性有时在 getter 期间设置,但在更改 GridFS 中的文件名时使用。

根据您的 var_dump() 输出中的其他值,看起来 GridFS 中肯定有一个文件(它具有 block 大小、字节长度、md5 哈希等)。我建议调试 GridFSFile::getBytes() 方法并确保它正确链接到内部 MongoGridFSFile 实例上的 getBytes() 方法。或者,您可以尝试调用 GridFSFile::getMongoGridFSFile() 并直接使用原始驱动程序类。这会将其缩小为学说或驱动程序问题。

顺便问一下,您使用的是什么版本的 PECL 驱动程序? GridFS 过去有一些错误,并且在最近的版本中有一些更新(参见:changelog)。

关于php - 为什么 GridFS 文件名和字节为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12111540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com