【问题标题】:Nginx + PHP7-FPM Content-Type empty $FILESNginx + PHP7-FPM 内容类型为空 $FILES
【发布时间】:2018-12-13 04:03:19
【问题描述】:

当我尝试使用 PostMan 发送文件并且 Content-Type 标头设置为任何类型的值时,$FILES 数组完全为空。

如果我删除此标头,我可以在数组中看到该文件。

我已经为该标题尝试了很多不同的值,但似乎都没有。

问题是我正在与外部供应商合作,他们的软件无法从他们的 POST 请求中删除该标头

使用以下配置:

  • Nginx/1.12.2
  • PHP 7.0.28

以及 nginx vhost 上的以下配置:

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

【问题讨论】:

  • 您将标头值设置为什么?
  • 任何类型的标头 Content-Type 值都会给我这个问题,只有当我不设置标头 $FILES 才会正确填充
  • 你尝试了哪些价值观?
  • 很有帮助。祝你好运。
  • 如果您提供一些额外的解释和 cmiiw 将会很有帮助,您所说的 $FILES 是来自文件上传 API 的 $_FILES 对吗?你正在尝试从邮递员上传这些文件?什么是表格类型?表单数据? x-www-form-urlencoded?生的?二进制?

标签: php file nginx upload php-7


【解决方案1】:

要使$_FILES 起作用,您应该将标头content-type 设置为multipart/form-data。当您将其设置为其他任何值时,服务器将不知道如何获取您发送的文件。

请求正文也应采用multipart/form-data 要求的格式。这是由文件上传库自动完成的(和浏览器)。

现在,当您删除 content-type 标头时它起作用的原因是 Postman 在您在请求中包含文件时自动添加它,并将整个请求格式化为 multipart/form-data 格式。

【讨论】:

    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多