我将SonataMediaBundle 2.3.3与Symfony 2.5.12一起使用。当我生成一个publicUrl时,它给了我一个错误的路径(此外还有png扩展名)。
这是我的sonata.yml文件:
sonata_media:
contexts:
default:
providers:
- sonata.media.provider.image
formats:
..
avatar:
providers:
- sonata.media.provider.image
formats:
..
avatar-video:
providers:
- sonata.media.provider.file
formats:
mobile: { width: 1850 , quality: 768}
cdn:
..
providers:
image:
..
file:
filesystem: sonata.media.filesystem.s3
allowed_mime_types: ['video/quicktime']
在我的控制器中:
avatar = $request->request->get('avatar');
$path = tempnam(sys_get_temp_dir(), 'avatar');
$fileSize = file_put_contents($path, file_get_contents($avatar));
$providerName = 'sonata.media.provider.file';
$context = 'avatar-video';
$mediaManager = $this->get('sonata.media.manager.media');
$media = $mediaManager->create();
$media->setBinaryContent(new File($path));
$mediaManager->save($media, $context, $providerName);
$user->setImage($media);
$provider = $this->get($media->getProviderName());
$format = $provider->getFormatName($media, "mobile");
$publicUrl = $provider->generatePublicUrl($media, $format);
返回错误的文件名错误' png'扩展:
http://../avatar-video_mobile/file.png
但是,我可以根据提供者参考检索正确创建的文件名(例如:db826fcb917f488cadf3b6bf19594bc0e2b123ac.qt):
$currentProviderRef = $user->getImage()->getProviderReference();
但是,我仍需要硬编码这个资源的整个路径。有没有办法为自定义视频文件获取正确的publicUrl?例如,链接到这个' qt' quicktime文件?
谢谢
答案 0 :(得分:0)
提供程序类是Sonata \ MediaBundle \ Provider \ ImageProvider。 在那里你会找到方法:
/**
* {@inheritdoc}
*/
public function generatePublicUrl(MediaInterface $media, $format)
{
if ($format == 'reference') {
$path = $this->getReferenceImage($media);
} else {
$path = $this->thumbnail->generatePublicUrl($this, $media, $format);
}
return $this->getCdn()->getPath($path, $media->getCdnIsFlushable());
}
所以在你的情况下,只需使用相同的功能,但使用" reference"作为格式,这将返回文件的路径。
$ provider-> generatePublicUrl($媒体,'参考&#39);