【问题标题】:AJAX sends file, but PHP wont receive it, if file is too large (but it is not)AJAX 发送文件,但 PHP 不会接收它,如果文件太大(但不是)
【发布时间】:2022-01-08 14:25:42
【问题描述】:

我正在使用 AJAX 上传两个图像(采用 base64 编码)。如果图像很小(例如,一张图像 500kB,另一张图像 300kB,总共

有什么想法可能是错的吗?

这里是ajax:

$.ajax({
    url:'upload.php',
    method:'POST',
            contentType:"application/x-www-form-urlencoded",
    data: {orig:original,image:cropped},
    success:function(data)
    {
        $modal.modal('hide');
    }
});

这是 PHP 代码:

echo print_r($_POST);

这是 PHP 设置:

file_uploads    On
max_execution_time  120
max_file_uploads    20
post_max_size   256M
upload_max_filesize 256M

【问题讨论】:

  • 在开发者控制台中,您是否看到服务器错误消息?服务器本身(Apache、Nginx 等)也可能有限制。例如,Nginx 通常默认为 2MB,而 base64 编码的 1.5MB 非常接近。
  • @ChrisHaas 我在开发者控制台中没有看到任何错误。但我会尝试与服务器管理员检查这些限制。谢谢!
  • 要进一步调试,暂时忘记 AJAX,只需制作一个简单无聊的 HTML 表单并上传文件,然后尝试一个大文件。然后您应该会看到一个响亮的错误消息。
  • 感谢您的建议。我尝试了简单的 HTML 上传 - 它适用于大文件 (20MB+)。我还尝试简化 ajax 代码以仅上传一张图像并尝试不同的图像大小。似乎在 1MB 的发送数据(控制台中的有效负载)处有明确的截止日期。如果上传的变量超过 1MB,则不接收(但接收其余部分)。
  • 我刚刚在不同的虚拟主机上尝试过,它在那里运行良好。所以看起来它确实是一些服务器设置。将与虚拟主机管理员一起解决它。

标签: javascript php ajax file-upload


【解决方案1】:

在与虚拟主机管理员讨论后,我们发现问题是由 nginx 限制 client_max_body_size 引起的,该限制设置为 1MB。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2013-12-18
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多