У меня есть холст, нарисованный пользователем.
В 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")));
Поэтому я устанавливаю свойство img объекта doodle в значение 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.
https://yougotadoodle.appspot.com/d.jsp?id=1483002
Если я использую debugimg, это то, что сохраняется:
http://yougotadoodle.appspot.com/d?id=1483002&img=true&debugimg=true
Но когда я пытаюсь обслужить его с помощью setContentType("image/png;base64") или даже просто "image/png", вы получаете неработающую картинку:
http://yougotadoodle.appspot.com/d?id=1483002&img=true
Я пробовал несколько разных вещей, в том числе не использовать substr(22). Есть идеи?
Я попытался использовать Blob(), поэтому сохранил его так:
doodle.setProperty("img", new Blob(req.getParameter("img").getBytes()));
и читать так:
resp.getWriter().print(((Blob)groove.getProperty("img")).getBytes());
Но это, казалось, выплевывало что-то вроде этого:
[B@1f11e0f