Показать MySQL PDF-файл BLOB-объекта в Symfony 2.0
У меня есть ссылка:
{% for item in list %}
...
<a href="{{ path('show', { 'id': item.id }) }}"> read pdf file</a>
{% endfor %}
Когда пользователь нажимает на ссылку, я хотел бы показать PDF-файл (файл, сохраненный в виде BLOB-объекта в MySQL). Приведенный ниже код неверен, но я хочу, чтобы мои действия выполнялись следующим образом.
/**
* @Route("/show", name="show")
*/
public function showAction()
{
$id = $this->get('request')->query->get('id');
$item = $this->getDoctrine()->getRepository('MyDocsBundle:Files')->file($id);
$pdfFile = $item->getFile(); //returns pdf file stored as mysql blob
$response = new Response();
$response->setStatusCode(200);
$response->headers->set('Content-Type', 'application/pdf');
$response->setContent($pdfFile);
$response->send() //not sure if this is needed
return $response;
}
2 ответа
Решение
Я не уверен, что в Doctrine изначально есть тип BLOB-объектов, поэтому я предполагаю, что он настроен для правильного хранения файла как фактического BLOB-объекта в базе данных.
Попробуйте что-нибудь еще в соответствии с этим...
/**
* @Route("/show/{id}", name="show")
*/
public function showAction($id)
{
$item = $this->getDoctrine()->getRepository('MyDocsBundle:Files')->find($id);
if (!$item) {
throw $this->createNotFoundException("File with ID $id does not exist!");
}
$pdfFile = $item->getFile(); //returns pdf file stored as mysql blob
$response = new Response($pdfFile, 200, array('Content-Type' => 'application/pdf'));
return $response;
}
Я столкнулся с той же проблемой, для этого я изменил тип поля в классе сущности. это было "пятно", я сделал это "текст"
/**
* @var string
*
* @ORM\Column(name="content", type="text", nullable=false)
*/
private $content;