我在视图中有这个 jquery 代码,与我的上传控制器有关:
function screenshot(){
var dataUrl = renderer.domElement.toDataURL("image/png");
$.post("picturepicker", {dataUrl: dataUrl, uploadnumber: 2
}
}
它成功地向这个函数发送数据:
public function picturepicker(){
...
if($this->request->is('post')){
define('UPLOAD_DIR', WWW_ROOT . 'img/'); // increase validation
$img = $_POST['dataUrl']; // Tried $this->request['dataURL'], retrieved 'dataURL' just fine
$upload = $_POST['uploadnumber']; // tried $this->request['uploadnumber'], did not retrieve 'uploadnumber'
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = UPLOAD_DIR . $upload . '.png'; // UPLOAD_DIR . uniqid() . '.png';
$success = file_put_contents($file, $data);
print $success ? $file : 'Unable to save the file.';
效果很好,除了每次我运行 javascript 时,都会创建一个新的数据库行。由于我没有创建函数,我想不知何故 jquery 无意中调用了这个函数:
public function upload(){
if ($this->request->is('post')) {
//var_dump($this->request->data);
$this->Upload->create();
....
但是,我对此表示怀疑,因为即使我删除了对 create 函数的所有引用,仍然会添加行。
那么为什么会发生这种情况,我应该如何解决呢?我怀疑 jquery 代码以某种方式调用了我的所有函数,并且我需要在其他任何获取 post 数据的函数周围放置一个 if 块。有人告诉我,这不应该是这样,也许蛋糕的路由是罪魁祸首。或者,我可能错过了 cake 文档中的某些内容 - 也许 cake 设置为为每个发布请求创建一个新的 DB 行,我需要告诉它不要以某种方式。