我在一个生成艺术项目上工作,我想让用户从算法中保存结果图像。大意是:

使用生成算法在HTML5 Canvas上创建图像 当图像完成时,允许用户将画布作为图像文件保存到服务器 允许用户下载图像或将其添加到使用该算法生成的图像库中。

然而,我卡在了第二步上。在谷歌的帮助下,我找到了这篇博客文章,这似乎正是我想要的:

这就引出了JavaScript代码:

function saveImage() {
  var canvasData = canvas.toDataURL("image/png");
  var ajax = new XMLHttpRequest();

  ajax.open("POST", "testSave.php", false);
  ajax.onreadystatechange = function() {
    console.log(ajax.responseText);
  }
  ajax.setRequestHeader("Content-Type", "application/upload");
  ajax.send("imgData=" + canvasData);
}

和相应的PHP (testSave.php):

<?php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) {
  $imageData = $GLOBALS['HTTP_RAW_POST_DATA'];
  $filteredData = substr($imageData, strpos($imageData, ",") + 1);
  $unencodedData = base64_decode($filteredData);
  $fp = fopen('/path/to/file.png', 'wb');

  fwrite($fp, $unencodedData);
  fclose($fp);
}
?>

但这似乎没有任何作用。

更多的谷歌发现这篇博客文章是基于之前的教程。差别不大,但或许值得一试:

$data = $_POST['imgData'];
$file = "/path/to/file.png";
$uri = substr($data,strpos($data, ",") + 1);

file_put_contents($file, base64_decode($uri));
echo $file;

这一个创建了一个文件(耶),但它已损坏,似乎不包含任何东西。它看起来也是空的(文件大小为0)。

我做错了什么吗?我存储文件的路径是可写的,所以这不是一个问题,但似乎什么都没有发生,我不确定如何调试这一点。

Edit

下面是Salvidor Dali的链接,我把AJAX请求改为:

function saveImage() {
  var canvasData = canvas.toDataURL("image/png");
  var xmlHttpReq = false;

  if (window.XMLHttpRequest) {
    ajax = new XMLHttpRequest();
  }
  else if (window.ActiveXObject) {
    ajax = new ActiveXObject("Microsoft.XMLHTTP");
  }

  ajax.open("POST", "testSave.php", false);
  ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  ajax.onreadystatechange = function() {
    console.log(ajax.responseText);
  }
  ajax.send("imgData=" + canvasData);
}

现在创建的映像文件不是空的!似乎内容类型很重要,将其更改为x-www-form-urlencoded可以发送图像数据。

控制台返回(相当大的)base64代码字符串,数据文件为~140 kB。但是,我仍然无法打开它,它似乎没有被格式化为图像。

如何将数据发布到iframe?

我使用cURL命令行实用程序发送HTTP POST到web服务。我想将一个文件的内容作为POST的主体实体。我已经尝试使用-d </path/to/filename>以及其他具有类型信息的变体,如——data </path/to/filename>——data-urlencode </path/to/filename>等…该文件始终是附加的。我需要它作为肉体实体。

当比较HTTP GET和HTTP POST时,从安全角度看有什么不同?其中一个选择是否天生就比另一个更安全?如果有,为什么?

我意识到POST没有公开URL上的信息,但其中有任何真正的价值吗?或者它只是通过隐匿性来实现安全?当安全性是一个问题时,我是否有理由更喜欢POST ?

编辑: 通过HTTPS, POST数据被编码,但url会被第三方嗅探吗?此外,我正在处理JSP;当使用JSP或类似的框架时,是否可以公平地说,最佳实践是避免将敏感数据完全放在POST或GET中,而是使用服务器端代码来处理敏感信息?

最近谷歌和英特尔已经发布了一种新的方式来运行模拟器,这应该比以前的版本(已经模拟ARM CPU)更好。这里有一些关于它的链接:这个和这个。

但是,在安装新组件并按照指示创建新的模拟器配置之后,我得到一个错误,也看不到任何改进。我已经尝试了API 10和API 15, GPU启用和禁用。这些配置都没有帮助。我也在两台不同的电脑上尝试过,没有任何提升(而且出现了同样的错误)。

似乎在我读过的帖子中,没有人有任何问题,所有人都报告了一个更快的模拟器。

它显示的错误是:

emulator: Failed to open the HAX device!
HAX is not working and emulator runs in emulation mode
emulator: Open HAX device failed

为什么会发生这种情况,有办法解决吗?还有其他人得到这些错误吗?反之亦然?

顺便说一下,我有一个英特尔的CPU,如果这有问题的话。


编辑:

这是我在BIOS中看到的,所以它应该是可用的…:

如何阅读,如果一个复选框被选中在PHP?

我想从邮差谷歌Chrome扩展POST数据。

我想用不同的数据提出10个请求,它应该是在同一时间。

在Postman中可以这样做吗?

如果是,谁能给我解释一下这是如何实现的?

向canvas元素添加一个单击事件处理程序,返回单击的x和y坐标(相对于canvas元素),最简单的方法是什么?

不需要传统浏览器兼容性,Safari、Opera和Firefox就可以了。

我想从命令行设置Android开发环境,遇到以下问题:

wget http://dl.google.com/android/android-sdk_r22.0.5-linux.tgz

解压完成后,运行

tools/android update sdk --no-ui

但是,它跑起来太慢了

Fetching https://dl-ssl.google.com/android/repository/addons_list-2.xml

结果是在文件夹build-tools中什么都没有,我想要的是apapt和apkbuilder,因为我想从命令行构建apk而没有ant。