簡體   English   中英

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"
    ]
}

因此,該文件似乎可以正常上傳,但是現在在哪里? 我該怎么讀?

此代碼返回文件的mime類型:

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

但這只是直覺,因為我沒有在“文件”類上找到任何文檔。 有這樣的文件嗎?

您所采用的路徑將使您脫離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();

}

該文件未存儲在任何地方(不在永久位置,而是如php.ini中所述,位於上載文件的臨時目錄中,如果會話結束,則該文件消失了),它只是在HTTP請求中發送的,這就是你正在讀

在這里,您可以閱讀有關文件上傳和與Doctrine相關的內容的更多信息,盡管如果您只想存儲文件,則無需使用Doctrine ORM

您可以在此處看到UploadFile API(HttpFoundation組件) ,該類位於遠離Doctrine生態系統的地方

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM