【问题标题】:Symfony 4 - API manage multiple files upload (no bundle)Symfony 4 - API 管理多个文件上传(无捆绑)
【发布时间】:2019-09-25 13:42:30
【问题描述】:

我正在使用 Symfony 4 构建一个没有 API 包的 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_FILE\4b737fac533294776e386a3469e84e16.png" -F "pictures=@PATH_TO_FILE\azekh1454621e54516ze321a511z6259.png" http://127.0.0.1:8000/api/incidents/

添加

我也尝试过使用 Postman,结果相同。这是我的第一个 API,我有点迷路了! 我尝试了很多东西,一切都失败了:(

谁能给我一个线索以找到解决方案?

谢谢!!

【问题讨论】:

  • php 的设计是,如果您的请求有多个分配 x='something' 和 x='else' 它最终将是 x='else' 而不是 x=['something', '别的']。这同样适用于文件。这是第 1 部分(答案是,它必须是 pictures[]=...,可能已经逃脱,我不记得了……)如果仍然没有帮助,请查看 php.net/manual/en/features.file-upload.php 并仔细阅读。
  • 好吧,感谢您的回复,如果我将 [] 添加到我的 curl 中,这是可行的,但我不知道为什么这在 Postman 中不起作用。我虽然邮递员可以处理这种事情:D

标签: api symfony multiple-file-upload


【解决方案1】:

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

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 问题的一些提示:

Upload an image through HTTP POST with Postman

【讨论】:

  • 好的,现在可以了,我在 curl 中添加了括号以将其转换为数组 :) 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2019-02-11
  • 1970-01-01
  • 2018-05-15
  • 2020-11-29
  • 1970-01-01
  • 2018-01-14
  • 2018-06-01
  • 2014-09-17
相关资源
最近更新 更多