PHP-条令存储文件(数据库中的二进制文件)

PHP-条令存储文件(数据库中的二进制文件),php,database,symfony,doctrine,Php,Database,Symfony,Doctrine,我正在寻找一个如何使用doctrine在数据库中存储文件的示例。 不幸的是,我在网上找不到很多信息 我想到了这样一个模式: 文件:id、文件名、文件文本、文件大小、文件MIME、修改数据、创建数据 文件数据:id、文件id、二进制数据、修改数据、创建数据 有人能给我一个实体示例,其中有一个存储/检索文件的函数吗 提前谢谢 至少有两种方法 使用 使用 在这两种情况下,重点都是打开Upload并将其内容填充到entity属性(在表单发布之后,但在数据持久化到db之前)。因此,您需要有两个实体属性

我正在寻找一个如何使用doctrine在数据库中存储文件的示例。 不幸的是,我在网上找不到很多信息

我想到了这样一个模式:

文件:id、文件名、文件文本、文件大小、文件MIME、修改数据、创建数据

文件数据:id、文件id、二进制数据、修改数据、创建数据

有人能给我一个实体示例,其中有一个存储/检索文件的函数吗


提前谢谢

至少有两种方法

  • 使用
  • 使用
在这两种情况下,重点都是打开Upload并将其内容填充到entity属性(在表单发布之后,但在数据持久化到db之前)。因此,您需要有两个实体属性:上传的文件处理程序(未映射到db)和文件文本本身(映射到db)

以下是生命周期回调的示例:

实体:

/**
 * @ORM\Entity()
 * @ORM\HasLifecycleCallbacks
 */
class SomeEntity {

    /**
     * Virtual field used for handling the file
     *
     * @Assert\File()
     */
    private $fileHandler;

    /**
     * @var string
     *
     * @ORM\Column(type="text")
     */
    private $file;

    /**
     * @ORM\PrePersist()
     * @ORM\PreUpdate()
     */
    public function saveFileContent()
    {
        $tmpName = md5(uniqid(mt_rand(), true)) . '.' . $this->fileHandler->guessExtension();
        try
        {
            $this->fileHandler->move(
                '../../../tmp/',
                $tmpName
            );
        } catch (\Exception $e) {}

        $this->setFile(file_get_contents('../../../tmp/' . $tmpName));
        unlink('../../../tmp/' . $tmpName);
    }
}
这也可能有帮助: