我有一个画布,我可以毫无问题地将其绘制到 DOM 上,也可以使用以下方法在本地为用户保存:
storCanvas.toBlob(function(blob) { saveAs(blob, name + ".png");});
(注意:我已经包含 canvas-toBlob.js 用于跨平台支持,来自http://eligrey.com/blog/post/saving-generated-files-on-the-client-side)
现在,我想做的是将相同的画布元素发送到服务器。我以为我可以做类似的事情:
storCanvas.toBlob(function(blob) {upload(blob);});
在哪里上传(blob);是:
function upload(blobOrFile)
{
var xhr = new XMLHttpRequest();
xhr.open('POST', 'upload_file.php', true);
xhr.onload = function(e) { /*uploaded*/ };
// Listen to the upload progress.
var progressBar = document.querySelector('progress');
xhr.upload.onprogress = function(e) {
if (e.lengthComputable)
{
progressBar.value = (e.loaded / e.total) * 100;
progressBar.textContent = progressBar.value;
}
};
xhr.send(blobOrFile);
}
(摘自:http ://www.html5rocks.com/en/tutorials/file/xhr2/ )
现在,我认为这会起作用,但是我的 PHP 页面(我可以使用标准 HTML 表单进行 POST 成功)报告(通过 firebug)它得到了一个 0kB 的无效文件。我认为问题在于我转换为 blob,但我不确定正确的解决方法......