Symfony 4 - API 管理多个文件上传(无捆绑)

Symfony 4 - API manage multiple files upload (no bundle)

我正在使用没有 API 捆绑包的 Symfony 4 构建一个 API。我正在手动创建所有端点,一切正常。 我的问题是当我试图上传多个文件时。 我有一个带有字段图片的实体,我需要用户在其中上传多个文件。 问题是我无法获取文件,我只收到一个文件。

这是我实体上的字段,是一个数组类型,我不知道这是不是最好的做法:

/**
 * @ORM\Column(type="array")
 * @OA\Property(type="array")
 * @Groups("main")
 */
private $pictures = [];

在我的控制器中,我正在尝试对文件进行计数(仅用于测试),但我始终只有 1 个文件:

$files = $request->files;
    return $this->json(count($files)); // result 1

用于获得此结果的卷曲:

curl -H "Authorization: Bearer MY_TOKEN" -F "pictures=@PATH_TO_FILEb737fac533294776e386a3469e84e16.png" -F "pictures=@PATH_TO_FILE\azekh1454621e54516ze321a511z6259.png" http://127.0.0.1:8000/api/incidents/

添加

我也试过邮递员,同样的结果。这是我的第一个 API,我有点迷路了! 我尝试了很多东西,但都失败了:(

任何人都可以给我找到解决方案的线索吗?

谢谢!!

与提供的任何其他请求参数一样,完全相同参数的多个实例通常会相互覆盖:

https://example.org/?param=1&param=2

会变成

['param' => 2] // in $_REQUEST or whatever

所以,用pictures=...发送两个文件也会遭遇同样的命运。

要解决该问题,php 是否 理解 [] 语法:

https://example.org/?param[]=1&param[]=2

会变成

['param' => [1,2]] 

所以,对于 curl 来说,将 pictures=... 变成 pictures[]=... 就足够了。

文件可以通过不同的方式传输。 PHP 有一些缺陷,例如,它只接受以 multipart/form-data (source) 形式发送的文件,这会导致邮递员问题,显然默认情况下发送文件的方式不同,您必须不同地设置它,请参阅以下 SO 问题以获取一些提示: