Symfony SonataMedia-为视频生成的公共url返回错误的文件名和类型

Symfony SonataMedia-为视频生成的公共url返回错误的文件名和类型,symfony,sonata-media-bundle,Symfony,Sonata Media Bundle,我将SonatamaDiabundle 2.3.3与Symfony 2.5.12一起使用。当我生成一个publicUrl时,它给了我一个错误的路径(而且是png扩展) 这是我的sonata.yml文件: sonata_media: contexts: default: providers: - sonata.media.provider.image formats:

我将SonatamaDiabundle 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):

但是,我仍然需要对这个资源的整个路径进行硬编码。有没有办法为自定义视频文件获取正确的publicUrl?例如,指向此“qt”quicktime文件的链接


谢谢

提供者类是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->generatePubliccurl($media,'reference')

提供程序类是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->generatePubliccurl($media,'reference')