Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试为最初由canvas.toDataURL()创建的GAE数据存储中存储的图像提供服务_Java_Javascript_Image_Google App Engine_Canvas - Fatal编程技术网

Java 尝试为最初由canvas.toDataURL()创建的GAE数据存储中存储的图像提供服务

Java 尝试为最初由canvas.toDataURL()创建的GAE数据存储中存储的图像提供服务,java,javascript,image,google-app-engine,canvas,Java,Javascript,Image,Google App Engine,Canvas,我有一个由用户绘制的画布 在JavaScript中,我执行以下操作: var data = canvas.toDataURL().substr(22); // snipped code that sets up xhr POST to "d/" var params = "img=" + encodeURIComponent(data); xhr.send(params); 我使用substr(22)来删除“data:image/png;base64,” 然后在应用程序引擎中,我会: do

我有一个由用户绘制的画布

在JavaScript中,我执行以下操作:

var data = canvas.toDataURL().substr(22);

// snipped code that sets up xhr POST to "d/"

var params = "img=" + encodeURIComponent(data);
xhr.send(params);
我使用substr(22)来删除“data:image/png;base64,”

然后在应用程序引擎中,我会:

doodle.setProperty("img", new Text(req.getParameter("img")));
因此,我将doodle实体的img属性设置为canvas.toDataURL().substr(22)

现在,当我想要检索图像时,我会:

if (debugimg) {
    resp.setContentType("text/plain");
    resp.getWriter().print(((Text)groove.getProperty("img")).getValue());
}
else {
     resp.setContentType("image/png;base64");
     resp.getWriter().print(((Text)groove.getProperty("img")).getValue());
}
但对我来说,这个形象永远不会出现

这里有一个例子。我画了这个,可以保存它并用JavaScript呈现它

如果我使用debugimg,将保存以下内容:

但是,当我尝试使用setContentType(“image/png;base64”)甚至“image/png”为其提供服务时,您会得到一张不完整的图片:

我试过几种不同的方法,包括不替换它。有什么想法吗

我尝试使用Blob(),因此存储方式如下:

doodle.setProperty("img", new Blob(req.getParameter("img").getBytes()));
resp.getWriter().print(((Blob)groove.getProperty("img")).getBytes());
[B@1f11e0f
像这样读:

doodle.setProperty("img", new Blob(req.getParameter("img").getBytes()));
resp.getWriter().print(((Blob)groove.getProperty("img")).getBytes());
[B@1f11e0f
但那似乎吐出了这样的东西:

doodle.setProperty("img", new Blob(req.getParameter("img").getBytes()));
resp.getWriter().print(((Blob)groove.getProperty("img")).getBytes());
[B@1f11e0f

在将此字符串用作
image/png
之前,必须对其进行解码,因为它是Base64编码版本


我用Python在本地测试了它,你的
你好工作正常。我不知道如何在Java中实现它,但它应该是这样的。

这里有三个代码片段,它们通过put to a blob属性在JS端(jpg)对我起到了作用。可能不是最优的,但确实有效。嗯-斯蒂夫

创建画布渲染:

imgFinalData = canvas.toDataURL('image/jpg', 1.0);
POST to GAE的设置变量:

f64 = imgFinalData.substr(imgFinalData.indexOf(',')+1).toString();
Post to GAE(fd是用于存储多个Post变量的数组):

一个是GAE端(Python):

存储POST数据的属性(实体类中的行):

bytes=db.BlobProperty(必需=True,索引=False)

如何处理post数据b/4 put:

data=urllib.unquote(self.request.get('bytes'))

数据=数据。替换(“”,“+”)

字节=base64.b64解码(数据+'='*(4-len(数据)%4))

put的实体语句内的建筑红线:

字节=db.Blob(字节)