Symfony: как получить правильный тип пантомимы на ppt и pptx - PullRequest
0 голосов
/ 19 сентября 2019

Я хочу импортировать файл PowerPoint в мое приложение Symfony.Я разрешил эти типы MIME в параметр белого списка.

co_upload_white_list: 
    - "image/*"
    - "application/pdf"
    - "application/x-pdf"
    - "application/msword"
    - "application/vnd.openxmlformats-officedocument.presentationml.presentation"
    - "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
    - "application/vnd.oasis.opendocument.text"
    - "application/vnd.ms-excel"
    - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    - "application/vnd.oasis.opendocument.spreadsheet"
    - "application/vnd.ms-powerpoint"

Этот код работает нормально, но MIME-тип возвращается, возвращаемый Symfony / Component / HttpFoundation / File / MimeType / FileBinaryMimeTypeGuesser.php в $ file-> getMimeType ():application / octet-stream, но это должен быть файл application / vnd.openxmlformats-officedocument.presentationml.presentation

use Oneup\UploaderBundle\Uploader\Naming\NamerInterface;

class UploadListener implements NamerInterface
{
[....]

    public function onValidate(ValidationEvent $event)
    {

     /**
     * $file is oneup/uploader-bundle/Uploader/File/FilesystemFile.php
     */
    $file = $event->getFile();
    $mimeType = $file->getMimeType();
    $fileSize = $file->getSize();
    $ext = $file->getExtension();

    $hotel = $event->getRequest()->attributes->get('hotel');
    $locale = ($hotel->getUserLocale()) ? $hotel->getUserLocale() : 'en';

    if (explode("/", $mimeType)[0] != "image" && !in_array($mimeType, $this->uploadWhiteList)) {

        $this->messenger->error("MimeType invalid: %mimeType%", ['%mimeType%' => $mimeType], $locale);
        throw new HttpException(400, "File type invalid, mimetype is '$mimeType', allowed=".json_encode($this->uploadWhiteList));
    }
[...]
}

Есть ли способ получить правильный тип MIME-типа?

1 Ответ

0 голосов
/ 19 сентября 2019

Попробуйте использовать mime_content_type

echo mime_content_type("example.ppt");

Выход:

application / vnd.ms-powerpoint

Попробуйте это

Использование symfony для меня это работает (symfony 3.4);

    $filepath = "/tmp/example.ppt";
    file_put_contents($filepath, file_get_contents("https://sample-videos.com/ppt/Sample-PPT-File-500kb.ppt"));
    $file = new \Symfony\Component\HttpFoundation\File\File($filepath);
    echo $file->getMimeType();

Тот же вывод:

application / vnd.ms-powerpoint

...