【问题标题】:Problem with Wordpress plugin sending base64 image data via Ajax - 400/404/500 errorsWordpress 插件通过 Ajax 发送 base64 图像数据的问题 - 400/404/500 错误
【发布时间】:2019-09-26 05:08:48
【问题描述】:

我正在开发一个 WordPress 插件,供客户设计定制 T 恤,并可选择上传他们自己的图片。该插件会截取几张屏幕截图并将它们通过电子邮件发送给打印部门。

在 Javascript 中,我将屏幕截图转换为 base64 数据,然后通过 Ajax 将其发送到 PHP 文件,这将为客户的设计创建一个文件夹,从数据中创建图像并将屏幕截图存储在其中。

大多数屏幕截图/base64 数据都可以正常发送,例如,仅添加文本不会产生任何问题。但是,如果用户上传的图片放大太多,则会导致各种错误(有时是 400 错误,有时是 404 有时是 500)。

使用 Wamp 在 Windows 上通过我的本地设置运行它,这很好。我可以毫无问题地上传图像并将它们缩放到 12 倍。但是,当我在实时站点上尝试此操作时,如果我将任何图像缩放到超过 4 倍,我会遇到上述问题,并且对于大多数图像,如果我什至尝试将它们放大到超过 1 倍,就会发生这种情况。

图像的分辨率/文件大小似乎有影响,虽然不是很明显。我可以发送一个巨大的纯红色正方形或 1 倍比例的普通图像。

起初我以为这是一个 POST 数据限制问题,除了实时站点的 POST 限制是我在 WAMP 设置中设置的两倍,它没有这个问题。

还有,甚至更陌生。我测试了上传图像,但用简单的字符替换了 base64 数据(所以放大的图像存在于页面中,但它的 base64 数据不是通过 POST 发送的),我仍然有同样的问题。所以我不认为这是一个简单的 POST 限制问题。

我一生都无法找到解决方案,任何帮助将不胜感激。

【问题讨论】:

  • 您查看WordPress' debug.log 是否有线索?如果有任何与您的问题相关的 PHP 通知/警告/错误消息,那是我要检查的第一件事。
  • 是的,它没有显示与此特定问题相关的任何内容
  • 在这种情况下,您必须在此处分享MCVE,以便我们帮助您调试问题。

标签: javascript php ajax wordpress base64


【解决方案1】:

想了个办法,我会给出我的解决方案,以防其他人遇到同样的问题并遇到这篇文章。

基本上,我将 base64 图像数据转换为 blob,并将其附加到新创建的 formData 对象。我发现将我的 nonce 和操作(修改为使用 AJAX 的 admin-ajax 方式)也附加到 formData 有助于处理 javascript 方面的大多数问题。在 AJAX 请求中,我将 processData 和 contentType 设置为 false。

至于 PHP 端,我设置了一个变量,等于我刚刚发送的特定 $_FILES 数组元素。我在该变量(即 blob 数据)上使用了 file_get_contents(),并将其包装在 file_put_contents() 中以实际写入图像。

这是快速版本。如果有人想要更详细的解释,请告诉我。

【讨论】:

    猜你喜欢
    • 2016-02-03
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2013-10-08
    • 2020-12-08
    • 2013-09-14
    相关资源
    最近更新 更多