【发布时间】: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 已经为你做到了。)