Symfony2控制器存储数据库中的文件

时间:2015-04-28 01:49:18

标签: php symfony file-upload

我一直在尝试使用控制器在我的数据库中存储二进制文件。我有一个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());

但这只是直觉,因为我没有在"文件"上找到任何文件。类。有这样的文件吗?

2 个答案:

答案 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) 正如你所看到的,这个班级生活在一个远离学说生态系统的地方