Sonata 媒体包 - 按名称获取 pdf 文件或在更新时更改文件名
Posted
技术标签:
【中文标题】Sonata 媒体包 - 按名称获取 pdf 文件或在更新时更改文件名【英文标题】:Sonata media bundle - get pdf file by name or change filename on update 【发布时间】:2016-05-11 13:31:32 【问题描述】:我目前使用 SonataAdminBundle 和 SonataMediaBundle。 我的媒体包文件有问题,因为我的 pdf 文件不是用它的名称保存的,而是用 md5 或其他格式保存的。
例如:
媒体表 id : 1 名称:iphone.pdf provider_reference:9a0b7a35131e23f91666324562c52f08b7cb6604.pdf我不想通过这个来获取我的 pdf:
9a0b7a35131e23f91666324562c52f08b7cb6604.pdf
但有它的名字(iphone.pdf
)。
我想知道是否可以:
按名称获取 pdf 文件?或
用特定名称保存我的 pdf 文件?【问题讨论】:
【参考方案1】:在你的 Twig 中使用它,这样你就可以用它的名字下载它:
path('sonata_media_download', 'id': (your media object here|sonata_urlsafeid))
为了不下载就看,我正在找那个,如果有什么我会回来的。
祝你好运!
【讨论】:
【参考方案2】:如果你想在 php 代码中获取文件的公共 URL,你可以使用这样的东西(代码来自我的 Application\Sonata\MediaBundle\Helper\MediaHelper)
public function getPublicUrl(Media $media, $format = 'reference')
if (!$media)
return '';
/** @var ImageProvider $provider */
$provider = $this->container->get($media->getProviderName());
$format = $provider->getFormatName($media, $format);
return $provider->generatePublicUrl($media, $format);
如果你需要twig中的链接,你可以在SonataMedia官方文档中找到特殊的助手(我忘记了助手的名字)。
【讨论】:
谢谢。但我需要通过 pdf 名称获取公共 url,而不是生成的 pdf 名称(如 9a0b7a35131e23f91666324562c52f08b7cb6604.pdf)。菲尔 生成的文件名是唯一的,源名不是,所以你不能创建路由/some/path/originName.pdf。如果您需要通过链接打开文档,您应该创建路由 /some/path/ docId / docName 并使用 docId 查找文件。 公共函数 someAction($id, $name) $repo = $this->getDoctrine()->getRepository('ApplicationSonataMediaBundle:Media'); $doc = $repo->find($id); if (null == $doc) throw $this->createNotFoundException('Документ не найден'); $helper = new UploadMediaHelper($this->container); $r = new BinaryFileResponse($this->get('kernel')->getRootDir() . '/../web' . $helper->getPublicUrl($doc)); $r->trustXSendfileTypeHeader();返回 $r;以上是关于Sonata 媒体包 - 按名称获取 pdf 文件或在更新时更改文件名的主要内容,如果未能解决你的问题,请参考以下文章
集成 Sonata Media Bundle(媒体实体)和 Sonata Classiffication Bundle(标签实体)
Sonata 管理员/媒体冲突 (CRUDController)
uniapp文件管理 文件列表 获取媒体文件 图片视频音频文档压缩包文件并实现可删除文件 图片文件列表 视频文件列表 音频文件列表 获取内存卡图片视频音频pdf xlxs docx txt