При загрузке файла через PHP + Symfony 4 выдается сообщение об ошибке «Файл не найден» - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь загрузить файл, используя документацию Symfony 4 (https://symfony.com/doc/4.0/controller/upload_file.html) - да, я знаю, что это устаревшая версия, но в настоящее время я не могу ее обновить.

Я сделал все как в документации (за исключением создания новой сущности, потому что мне нужно только загрузить файлы и отправить ссылку на этот файл по электронной почте), файлы загружаются правильно в мой каталог, но выдает HTTP 500 ошибок, а в логах есть что-то вроде этого:

[2020-04-20 15:39:40] request.CRITICAL: Uncaught PHP Исключение Symfony \ Component \ HttpFoundation \ File \ Exception \ FileNotFoundException: «Файл» / tmp / phpr2tM6D «не существует» в [...] / vendor / symfony / http-foundation / File / File. php строка 37 {«исключение»: «[объект ] (Symfony \ Component \ HttpFoundation \ File \ Exception \ FileNotFoundException (код: 0): файл \ "/ tmp / phpr2tM6D \" не существует в [...] / vendor / symfony / http-foundation / File / File . php: 37) "} []

есть идеи?

ок, форма в основном j

    {{ form_start(warranty_form) }}
    {{ form_end(warranty_form)}}

и фрагменты контроллера

    $form = $this->createForm(WarrantyType::class);
    $form->handleRequest($request);

    if($form->isSubmitted() && $form->isValid()) {
        /** @var UploadedFile $documentFile */
        $documentFile = $form->get('documentFile')->getData();

        if($documentFile) {
            $originalDocumentFilename = pathinfo($documentFile->getClientOriginalName(), PATHINFO_FILENAME);
            $newDocumentFilename = uniqid().'.'.$documentFile->guessExtension();

             try {
                $documentFile->move('%kernel.project_dir%/public/uploads/pdf',$newDocumentFilename);

              } catch(FileException $e) {

              }
                    $message = (new \Swift_Message('Test email '))
                    ->setFrom('error@example.org')
                    ->setTo('error@example.org')
                    ->setBody("a","text/plain");
        }   

и форма - это просто стандартная форма с возможностью загрузки файлов PDF

            ->add('documentFile', FileType::class, ['label' => 'Dokument', 'mapped' => false, 'required' => true, 'constraints' => [new File(['maxSize' => '1024k', 'mimeTypes' => ['application/pdf', 'application/x-pdf'], 'mimeTypesMessage' => 'Załaduj prawidłowy dokument'])]])  

1 Ответ

0 голосов
/ 11 мая 2020

Сначала я бы использовал ваш блок try + catch для вывода сведений об ошибке с помощью

} catch(FileException $e) {
    dd($e);
}

Может потребоваться дополнительная информация для отладки.

Из предоставленного сообщения об ошибке "The файл "/ tmp / phpr2tM6D" не существует ", я бы посоветовал проверить, что после загрузки этот файл или подобный файл создан для" / tmp " AND . Более важным является то, что к нему может получить доступ ваш PHP процесс. Я бы сказал, что файл есть, но он не может быть прочитан php. Это может произойти, если ваш веб-сервер и php используют другого владельца / группы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...