base64 でエンコードされたデータを canvas 要素から Express ハンドラに渡し、データを png ファイルに保存します
以下の ajax 呼び出しで contentType を何に設定すればよいですか? (デフォルトを使用すると、つまり x-www-form-urlencoded ではなく、開かないpngファイルが得られます)
$("#save").click(function(){
var canv = document.getElementById('imageView');
var canvData = canv.toDataURL('image/png');
console.log("the type is " + typeof canvData);
$.ajax({
type: "POST",
url: '/upload',
data: canvData,
contentType: '???',
success: function(data){
console.log(data);
}
});
});
完全を期すために、私のエクスプレスハンドラーは次のとおりです。
// insert an image
function objToString (obj) {
var str = '';
for (var p in obj) {
if (obj.hasOwnProperty(p)) {
str += p + '::' + obj[p] + '\n';
}
}
return str;
}
var fs = require('fs');
app.post('/upload', function(req, res){
var image = req.body;
image = objToString(image);
var noHeader = image.substring(image.indexOf(',') + 1);
var decoded = new Buffer(noHeader, 'base64');
fs.writeFile('testfile.png', decoded, function(err){
res.send("without header " + noHeader + "decoded " + decoded);
});
});