【问题标题】:Problem with uploading file in symfony 5.3在 symfony 5.3 中上传文件的问题
【发布时间】:2021-09-03 11:00:17
【问题描述】:

我尝试在 Symfony v5.3 中准备非常简单的上传控制器。我遵循了官方教程,但可能我遗漏了一些东西,我找不到它是什么。

我的类型类:

namespace App\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\FileType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints\File;

class ImportXType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('upload_file', FileType::class, [
                'required' => true,
                'constraints' => [
                    new File([
                        'mimeTypes' => [
                            'text/csv',
                        ],
                        'mimeTypesMessage' => "This document isn't valid.",
                    ])
                ],
            ]);
    }
}

我的控制器:

<?php

namespace App\Controller;

use App\Form\ImportXType;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

/**
 * Class ImportController
 * @package App\Controller
 * @Route("/api/v1/import", name="import_api")
 */
class ImportController extends AbstractController
{
    private $logger;

    /**
     * ImportController constructor.
     */
    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    /**
     * @Route("/x", name="import_x", methods={"POST"})
     */
    public function importX(Request $request): Response
    {
        $form = $this->createForm(ImportXType::class, null, array('csrf_protection' => false));
        $form->handleRequest($request);

        if ($form->isSubmitted()) {
            if ($form->isValid()) {
                $fileData = $form->getData()['upload_file'];
                if ($fileData) {
                    $this->logger->info(file_get_contents($fileData->getPathname()));
                } else {
                    return new Response("filedata is null", 400);
                }
            } else {
                return new Response("not valid", 400);
            }
        } else {
            return new Response("not submitted", 400);
        }
        return new Response("OK", 200);
    }
}

当我运行 curl 时:

curl -i -X POST -H "Content-Type: multipart/form-data" -F "upload_file=@a.csv" https://localhost:8000/api/v1/import/x

我收到not submitted 响应错误。

我发现改变了:

$form->handleRequest($request);

$form->submit(array_merge([], $request->request->all()));

可以提供帮助,但在此更改之后我收到另一个错误:filedata is null

请帮我找出我错过了什么......

【问题讨论】:

    标签: php symfony file-upload


    【解决方案1】:

    终于

    $request->files->get("upload_file")
    

    做了我想做的。但是我仍然无法理解,而 symfony 表单没有正确处理它...... :(

    【讨论】:

      【解决方案2】:

      基于official doc

      您需要使用$request-&gt;get('upload_file')-&gt;getData() 来获取 UploadedFile 对象

      【讨论】:

        【解决方案3】:

        试试这个:

        if ($form->isValid()) {
           $fileData = $form['upload_file']->getData();
           ...
        

        点赞this example

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-07
          • 2017-03-13
          • 1970-01-01
          • 1970-01-01
          • 2017-02-23
          • 2017-09-03
          • 2017-02-12
          • 1970-01-01
          相关资源
          最近更新 更多