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¶m=2
会变成
['param' => 2] // in $_REQUEST or whatever
所以,用pictures=...
发送两个文件也会遭遇同样的命运。
要解决该问题,php 是否 理解 []
语法:
https://example.org/?param[]=1¶m[]=2
会变成
['param' => [1,2]]
所以,对于 curl 来说,将 pictures=...
变成 pictures[]=...
就足够了。
文件可以通过不同的方式传输。 PHP 有一些缺陷,例如,它只接受以 multipart/form-data
(source) 形式发送的文件,这会导致邮递员问题,显然默认情况下发送文件的方式不同,您必须不同地设置它,请参阅以下 SO 问题以获取一些提示:
我正在使用没有 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¶m=2
会变成
['param' => 2] // in $_REQUEST or whatever
所以,用pictures=...
发送两个文件也会遭遇同样的命运。
要解决该问题,php 是否 理解 []
语法:
https://example.org/?param[]=1¶m[]=2
会变成
['param' => [1,2]]
所以,对于 curl 来说,将 pictures=...
变成 pictures[]=...
就足够了。
文件可以通过不同的方式传输。 PHP 有一些缺陷,例如,它只接受以 multipart/form-data
(source) 形式发送的文件,这会导致邮递员问题,显然默认情况下发送文件的方式不同,您必须不同地设置它,请参阅以下 SO 问题以获取一些提示: