我一直在尝试使用控制器在我的数据库中存储二进制文件。我有一个blob字段的实体。如何读取上传的文件,获取其二进制数据并将其存储在我的blob字段中?
到目前为止,我有这段代码:
public function postPictureAction($slug, Request $request)
{
return $request->files;
}
我回来了:
{
"parameters": {
"picture": {
"test": false,
"original_name": "Untitled Diagram.png",
"mime_type": "image/png",
"size": 13423,
"error": 0
}
},
"file_keys": [
"error",
"name",
"size",
"tmp_name",
"type"
]
}
所以文件似乎上传得很好,但现在,它在哪里?我怎么读呢?
此代码返回文件的mime类型:
$picture->setType($file->getMimeType());
但这只是直觉,因为我没有在"文件"上找到任何文件。类。有这样的文件吗?
答案 0 :(得分:1)
你正在走的路径会让你走出Symfony2,你将走向一条你将使用原生PHP的路径,生成一个带有'file'作为类型的表单来创建你作为UploadFile对象返回的上传文件。然后,如果您确实希望将文件存储为数据库中的blob,而不是按照文档中的建议使用上传文件夹:http://api.symfony.com/2.0/Symfony/Component/HttpFoundation/File/UploadedFile.html
您可以使用:
public function upload(){
$file = $request->files->get('picture');
$entity->setBinary(file_get_contents($file)); //binary property of your entity class is the blob
$entity_manager->persist($entity);
$entity_manager->flush();
}
答案 1 :(得分:0)
文件没有存储在任何地方(不是在一个持久的地方,在php.ini中描述的上传文件的临时目录中,如果会话结束,文件就行了),它只是在HTTP请求中发送的那就是你在读什么
here您可以阅读有关文件上传和Doctrine相关内容的更多信息,但如果您只想存储文件,则无需使用Doctrine ORM
here the UploadFile API (HttpFoundation component) 正如你所看到的,这个班级生活在一个远离学说生态系统的地方