【问题标题】:$request->files->all() is always empty$request->files->all() 始终为空
【发布时间】:2017-02-06 11:15:39
【问题描述】:

我正在使用 POSTMAN 测试我的 API,当我尝试发送任何文件时,$request->files->all() 的内容始终为空。

$request->server->parameters["CONTENT_LENGTH"] 似乎根据文件大小而变化。但我找不到获取文件内容的方法。

也尝试使用 $_FILES,但结果相同。

我什至做了一个 var_dump($_FILES);直接在我的 app_dev.php 中,然后从 Symfony 的框架中获取任何其他内容。

我的 php.ini 似乎没问题: 文件上传:开启 upload_max_filesize:绰绰有余 post_max_size: 绰绰有余

在 POSTMAN 中,我尝试了两种发送文件的方式:二进制文件和表单数据文件。

使用表单数据的 POSTMAN 代码示例如下所示:

PUT /retain_inspecciones/web/app_dev.php/api/planningfiles/6?files=true HTTP/1.1
Host: symfony.dev
symfonytoken: Bearer my-token
Cache-Control: no-cache
Postman-Token: 9c9cd91a-99f2-57ab-a290-966074b219f3
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="fileName"; filename=""
Content-Type: 


------WebKitFormBoundary7MA4YWxkTrZu0gW--

我不确定为什么文件所在的部分是空字符串,而 Content-Type 是空的。但这似乎是 POSTMAN 这样做的方式。

有什么想法吗?

【问题讨论】:

  • @CBroe 我认为在这种情况下没关系,我在处理方法之前已经捕获了请求。我已经测试了他们两个。无论如何,我想使用 PUT,因为我正在更新一个实体,而不是创建一个实体。 $_FILES 应该同时出现在 POST 和 PUT 方法中,不是吗?我的意思是...我想发送的不仅仅是请求的文件。有可能吗?
  • 不,$_FILES 仅适用于通过 POST 上传的文件。如果你想要 PUT 支持,那么你必须自己实现它:php.net/manual/en/features.file-upload.put-method.php(除非 symfony 已经为你做到了。)

标签: php symfony postman


【解决方案1】:

最后我决定尝试 curl 而不是 Postman,它在第一次尝试时就奏效了。

我不知道 curl 在构建请求时与 POSTMAN 有何不同,但我很满意。

【讨论】:

  • 你在用 curl 做 POST 吗?
  • 我正在这样做: curl -X PUT "url" -F "file=@filename" -b "token=token"
  • 我也有同样的问题 Kynethix 你能回答我的问题吗? stackoverflow.com/q/44352796/1395965
猜你喜欢
  • 2021-05-06
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 2020-06-06
  • 2021-05-22
  • 2015-07-10
  • 1970-01-01
  • 2017-07-31
相关资源
最近更新 更多