2016-07-13 2 views
1

キャンバスからajaxを使用してサーバーにアップロードしようとしていますが、毎回879バイトの空のイメージファイルがあるようです。私はどこに間違っているのか分からない。誰かが一見することができれば、それは最も高く評価されるだろう。キャンバスデータを保存しようとしましたが、ファイルが空になりました

document.getElementById('input').addEventListener("change",function (e) { 
    var file = e.target.files[0]; 
    var reader = new FileReader(); 
    var output = document.getElementById('test'); 
    reader.onload = function() { 
    var data = this.result; 
    var img = new Image(); 
    img.src = data; 
    img.onload = function() { 
var ctx = canvas.getContext("2d"); 
output.innerHTML = 'width: ' + img.width + '\n' + 'height: ' + img.height; 
ctx.drawImage(img, 0, 0, img.width, img.height); 

    }; 
    }; 
    reader.readAsDataURL(file); 
    var canvasData = canvas.toDataURL("image/png"); 

アヤックス以下

$アヤックス({ タイプ: "POST"、 URL: "upload_images.php"、 データ:{canvasData:canvasData}、 成功:関数(){ } });

$upload_dir = 'uploads/'; //implement this function yourself 
$img = $_POST['canvasData']; 
$img = str_replace('data:image/png;base64,', '', $img); 
$img = str_replace(' ', '+', $img); 
$data = base64_decode($img); 
$file = $upload_dir."image_name.png"; 
$success = file_put_contents($file, $data); 
header('Location: '.$_POST['return_url']); 
+0

コールバックから 'toDataURL'を呼び出しているので、イメージが描画される前に実行されます。 – Kaiido

+0

オンロードが実行されて空のキャンバスが出力されるのを待っていません。 JSはシングルスレッドで、現在の実行を終了するまではonloadは起動しません。 onData関数の最後にtoDataURLを追加する – Blindman67

答えて

0

Awseome、すべて解決... あなたのコメントに続いて、私はアンロード内toDataUrlだけでなくAjaxのアップロードとすべての良いを移動しました。再度、感謝します。

関連する問題