0

JavaScript:

var username = 'sami';
var myImage = canvas.toDataURL("image/png");
var ajax = new XMLHttpRequest();
ajax.open("POST", "Pic.php", false);
ajax.setRequestHeader('Content-Type', 'application/upload');
ajax.send(myImage);
ajax.send("q=" + encodeURIComponent(username));

PHP:

<? php
if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) {
    $user = $_POST['q'];
    $comp = $user.".png";
    $imageData = $GLOBALS['HTTP_RAW_POST_DATA'];
    $filteredData = substr($imageData, strpos($imageData, ",") + 1);
    $unencodedData = base64_decode($filteredData);
    $fp = fopen($comp, 'wb');
    fwrite($fp, $unencodedData);
    fclose($fp);
} ?>

这是代码,问题是我无法让用户发布,当图像仅保存其“.png”时......

4

2 回答 2

0

就像 apelsinapa 所说,您必须将它们打包在一起:

ajax.send("img=" + myImage + "&user=" + user);

当然,这意味着您使“应用程序/上传”无效,因为现在您又回到了表单编码。

同样,就像之前提到的那样,如果您允许使用查询字符串 ( $_GET) 参数来表示用户或首选文件名,或者其他任何内容,您可以保持应用程序上传,并且还可以拥有文件名。

ajax.open("POST", "Pic.php?user=" + user + "&fname=" + filename, true);
// leave headers as you have set them
// event-handlers here
ajax.send(myImage); 
于 2013-03-13T21:17:13.880 回答
0

仅发送一次请求,并将两个变量打包在同一个发送中。用不同的变量发送两次是没有意义的......

您还应该检查变量是否存在,服务器端,isset($_POST['q'])。

另一种解决方案可能是将用户作为 GET 变量添加到 url,例如:"Pic.php?q="+username 并为用户名处理 GET 变量

于 2013-03-13T20:54:43.213 回答