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

Symfony2 controller store file in database

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

所以文件似乎已经上传好了,但是现在,它在哪里?我该如何阅读?

此代码returns文件的 mime 类型:

$picture->setType($file->getMimeType());

但这只是直觉,因为我没有找到任何关于 "file" class 的文档。有这样的文档吗?

文件没有存储在任何地方(不在持久的地方,在 php.ini 中描述的上传文件的临时目录中,如果会话结束,文件会消失),它只是发送在 HTTP 请求中,这就是您正在读回的内容

here 你可以阅读更多关于文件上传和 Doctrine 相关的东西,但如果你只想存储一个文件,则不需要使用 Doctrine ORM

here the UploadFile API (HttpFoundation component) 如您所见,class 生活在远离 Doctrine 生态系统的地方

您所走的路径将使您脱离 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();

}