gpt4 book ai didi

javascript - jQuery AJAX 调用在传递 Rgraph 图像数据时返回 403 禁止错误

转载 作者:可可西里 更新时间:2023-11-01 01:54:39 25 4
gpt4 key购买 nike

我正在从事一个项目,我在其中使用 Rgraph PHP 库实现了几个图形/图表。在我的脚本中,我对图表执行以下操作:

  1. 计算图形点并使用 Rgraph Draw() 方法绘制图形。
  2. 使用 canvas.toDataURL() 方法创建图像数据变量。
  3. 使用 jQuery AJAX $.post() 方法将此图像数据变量传递到服务器。
  4. 通过 PHP 脚本将图像保存到服务器。

此解决方案中的所有内容在我的本地主机上运行良好,但在开发服务器上,传递图像数据的 AJAX 请求返回 403 错误

我记录了客户端和服务器端的数据以确定问题所在。客户端日志记录确认传递的 imageData 变量看起来正确。但是,服务器端日志记录确认正在传递的 imageData 变量是导致问题的原因。

有一个very similar question posted last year about this ,但是他们无法确定其根本原因。谁能帮我指出解决这个问题的正确方向?

我认为这可能是数据编码问题,但如果是这种情况,为什么它在一台服务器上工作而不在另一台服务器上工作?

我的相关 Javascript:

radar.Set('chart.contextmenu', [
['Get PNG', RGraph.showPNG],
null,
['Cancel', function () {}]
]);

radar.Draw();

var imageData = radar.canvas.toDataURL("image/png");

console.log('imageData: ' + imageData);
console.log('filename: ' + 'tmpRadar<?php echo $us['UsersSurvey']['user_id']; ?>-<?php echo $survey['Survey']['id']; ?>.png');

$.post("/Surveys/save_chart", {
src : imageData,
filename: 'tmpRadar<?php echo $us['UsersSurvey']['user_id']; ?>-<?php echo $survey['Survey']['id']; ?>.png'
});

客户端日志记录:

imageData: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABLAAAAOECAYAAACxbcj6AAAgAElEQ…AgQIAAgVECAqxR49YsAQIECBAgQIAAAQIECBAgQKCfwP8CXHJ+WDHVMbcAAAAASUVORK5CYII=
filename: tmpRadar19-1.png
POST http://website.com/Surveys/save_chart 403 (Forbidden)

AJAX 调用的 PHP 函数:

public function save_chart() {
if($this->request->is('ajax')) {
$this->log('request data: '.print_r($this->request->data, true));

$filename = $this->request->data['filename'];

$src = $this->request->data['src'];
$src = substr($src, strpos($src, ",") + 1);
$decoded = base64_decode($src);

$fp = fopen(WWW_ROOT.'files/graphs/'.$filename,'wb');
if(fwrite($fp, $decoded)) {
fclose($fp);
return json_encode(array('success' => '1'));
} else {
fclose($fp);
return json_encode(array('success' => '0'));
}
}
}

最佳答案

假设CORS这不是这里的问题(这听起来不像是因为它在您的本地主机上工作正常并且听起来像是您发布到您收到原始 GET 的同一域),这可能是 Apache 之间的配置错误在您的本地主机和开发箱上。鉴于问题仅出在您的 base 64 编码图像 POST 上,它可能太大,因此 apache 拒绝它。

根据 this SO post ,请尝试在您的 php.ini 中设置以下内容:

post_max_size=20M
upload_max_filesize=20M

或在 .htaccess/httpd.conf/virtualhost 中:

php_value post_max_size 20M
php_value upload_max_filesize=20M

请注意,在您发布 apache 错误日志之前,我无法确定这是否是原因。

关于javascript - jQuery AJAX 调用在传递 Rgraph 图像数据时返回 403 禁止错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30065462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com