用于XML的Symfony2 UploadedFile :: guessExtension()

时间:2014-10-17 10:50:36

标签: xml symfony file-upload mime-types

我在上传XML文件时遇到问题。尝试getExtension()(返回空字符串),guessExtension()guessClientExtension()(都返回NULL)。

我应该只是硬编码扩展(我知道它应该始终是XML)还是有办法获得它?我看到上传文件的mimeType是text/xml。当我上传.txt文件时,它会得到正确的扩展。

也许我上传文件错了?

$request = $this->getRequest();

$form = $this->createForm(new FileImportType(), null, ['em' => $this->getDoctrine()->getManager()]);
$form->submit($request);
if ($form->isValid()) {
    $file = null; // @var $file \Symfony\Component\HttpFoundation\File\UploadedFile
    foreach ($request->files as $file) {
        $file = $file['file'];
        break;
    }
    var_dump($file->guessExdtension());
}

由于

3 个答案:

答案 0 :(得分:1)

尝试从上传的$ file-> getFilename()获取它 然后,您可以使用以下方法提取扩展名:

 $fileExtension = pathinfo( $file->getFilename(), PATHINFO_EXTENSION);

在php文档中:http://php.net/manual/en/function.pathinfo.php

答案 1 :(得分:0)

我和我的团队一起努力寻找解决这个问题的方法。

似乎Symfony的库在其核心文件中缺少mimeType。

您可以在:

中添加mime类型
../vendor/symfony/src/Symfony/Component/HttpFoundation/File/MineType/MimeTypeExtensionGuesser.php

在我的情况下,guessExtension()无法识别.xls文件。

它缺少mime类型:" application / vnd.ms-office"

所以我将这一行添加到MimeTypeExtensionGuess.php中的$ defaultExtensions数组中:

'application/vnd.ms-office' => 'xls',

在您的情况下可能会丢失:

'application/xml' => 'xml',

干杯!我希望这会有所帮助。

答案 2 :(得分:0)

不要直接在供应商目录中编辑文件(如果需要,请执行拉取请求),因为升级时您将失去更改。

但是使用$file->getClientOriginalName()来获取您上传的原始文件名if $file->guessExtension()会让您错误。

我有类似的问题,mp3被识别为mpga'