首页 > 解决方案 > pdf 的 BinaryContent 为空

问题描述

我正在使用 Sonata Media Bundle 让用户上传 PDF 文件。我想使用 Imagick 创建 pdf 文档的预览图像。我有一个$media对象,其中包含有关我的 pdf 的信息。

当我这样做时die(dump($media)),我看到一个包含以下行的媒体对象:

#providerReference: "3c4460aae99b0084d08252065bf3eea1817842d9.pdf"

...并通过以下方式打开该文件:

open -a Preview ./data/storage/faq/0001/01/3c4460aae99b0084d08252065bf3eea1817842d9.pdf

...在我的 Mac 上生成一个完全清晰的 PDF。

问题是我还在浏览器中看到以下行:

#binaryContent: null

...这意味着我无法将二进制内容转储到临时文件中,以便让 Imagick 对其进行操作。

如何获得可以移交给 Imagick 的文件路径?

标签: phpsymfonysonata-media-bundle

解决方案


这大致是为了让我获得对文件的有用引用,并包含有效的二进制内容。

public function preUpdate(Document $document)
{
    $media = $document->getMedia();
    if ($media === null) {
        return;
    }
    $mediaName = $media->getName();
    if ($media->getContentType() !== 'application/pdf') {
        return;
    }

    $context = $media->getContext();
    $formats = $pool->getFormatNamesByContext($context);

    if (null === $formats) {
        return;
    }

    $provider = $this->getProvider($media->getProviderName());
    $publicUrls = [];

    $fullFilePath = $provider->getReferenceImage($media);



}

...

private function getPool()
{
    return $this->container->get('sonata.media.pool');
}

...

private function getProvider($name)
{
    return $this->container->get($name);
}

推荐阅读