通过PHP+Symfony 4上传文件会出现 "文件未找到 "的错误。

问题描述 投票:0回答:1

我正试图使用Symfony 4文档上传一个文件(https:/symfony.comdoc4.0controllerupload_file.html。)--是的,我知道这是一个过时的版本,但目前我无法更新它。

我已经按照文档中的要求做了所有的事情(除了创建一个新的实体,因为我只需要上传文件,并在电子邮件中发送链接到该文件),文件被正确地上传到我的目录,但它抛出HTTP 500错误,在日志文件中有这样的内容。

[2020-04-20 15:39:40] request.CRITICAL: 未捕获PHP异常Symfony/Component/HttpFoundation/File/Exception/FileNotFoundException。"文件 "tmpphpr2tM6D "不存在 "在[...]vendorsymfonyhttp-foundationFileFile.php第37行{"exception":"[object](Symfony\Component\HttpFoundationFile/Exception/FileNotFoundException(code: 0): 文件 "tmpphpr2tM6D\"不存在于[...]vendorsymfonyhttp-foundationFileFile.php:37)"}。[]

任何想法?

好吧,所以形式基本上只是

    {{ 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('[email protected]')
                    ->setTo('[email protected]')
                    ->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'])]])  
php symfony symfony4
1个回答
1
投票

首先,我会使用你的try+catch块来输出你的错误细节与

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

可能还有更多的信息需要你去调试。

从你提供的错误信息 "The file "tmpphpr2tM6D "does not exist "来看,我建议在上传后检查是否为 "tmp "创建了这个文件或类似的文件。AND 更重要的是,它可以被你的PHP进程访问。我想说文件是存在的,但是不能被php读取。这可能发生在你的webserver和php使用不同的owngroups的情况下。


1
投票

你能展示整个控制器的方法吗?你是否使用了 $documentFile 移动文件后的变量?

它看起来像 catch(FileException $e) 应该抑制你的异常,而且它仍然出现,我想也许你在某个地方尝试访问 $documentFile 变量,或者可能试图再次调用 $form->get('documentFile')->getData()?

你应该知道 $documentFile->move('', ''); 是用 $renamed = rename($this->getPathname(), $target);

更多见

© www.soinside.com 2019 - 2024. All rights reserved.