我正在寻找一个如何使用doctrine在数据库中存储文件的示例。 不幸的是我在网上找不到太多信息。
我想到了一个类似的架构:
文件:id,fileName,fileExt,fileSize,fileMime,modifiedAt,createdAt
fileData :id,file_id,binaryData,modifiedAt,createdAt
有人可以给我一个带有存储/检索文件功能的实体示例吗?
提前致谢!
答案 0 :(得分:0)
至少有两种方式。
在这两种情况下,重点是打开上传并将其内容填充到实体属性(在表单发布之后但在数据持久保存到db之前)。因此,您需要有2个实体属性:上传文件处理程序(未映射到数据库)和文件文本本身(映射到数据库)。
以下是生命周期回调的示例:
<强>实体:强>
/**
* @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);
}
}
这也可能有所帮助: How to handle File Uploads with Doctrine