キャンバスから画像を取得し、画像をdataurl文字列としてサーバーに送信しようとしていますが、サーバー上でdataurlをpng画像として保存したいと考えています。私はこのようなものを作りました。
1>dataurl 文字列をサーバーに送信するコードをアップロードします。
function upload(){
var url ="<%=request.getContextPath()%>/ImageSaver";
xmlhttp = initialize();
xmlhttp.open('POST',url,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("imgdata="+img);
xmlhttp.onreadystatechange= function()
{
if(xmlhttp.readyState==4 && (xmlhttp.status==200 ||xmlhttp.status==404))
{
alert("Image Uploaded Succesfully.");
document.getElementById('img').src = img;
if(xmlhttp.status==404 )
{
// next.style.display="none";
}
}
else
{
content.innerHTML = "Error";
}
};
}
2>サーバー上で、そのdataurlを取得して画像として保存しています。
try{
String img64 = request.getParameter("imgdata");
img64 = img64.replaceFirst("data:image/png;base64,","");
byte[] decodedBytes = DatatypeConverter.parseBase64Binary(img64);
System.out.println(""+img64);
BufferedImage bfi = ImageIO.read(new ByteArrayInputStream(decodedBytes));
File outputfile = new File("D:/saved.png");
ImageIO.write(bfi,"png",outputfile);
bfi.flush();
}
catch(Exception e)
{
e.printStackTrace();
}
しかし、サーバー側でこのエラーが発生しています
javax.imageio.IIOException: com.sun.imageio.plugins.png.PNGImageReader.readImage(不明なソース) で com.sun.imageio.plugins.png.PNGImageReader.read(不明なソース) で javax. javax.imageio.ImageIO.read(不明なソース) の javax.imageio.ImageIO.read(不明なソース) com.tcs.ilp.t198.osms.prdm.controller.ImageSaver.doPost(ImageSaver.java:50) の javax.servlet .http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) org.apache.catalina.core.org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470) の StandardContextValve.invoke(StandardContextValve.java:191) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) の org .apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter) .java:293) org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861) org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606) org.apache. Tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Unknown Source) 原因: java.util.zip.ZipException:無効なビット長が java.util.zip.InflaterInputStream.read で繰り返されます (不明なソース) で java.io.BufferedInputStream.fill (不明なソース) で java.io.BufferedInputStream.read(不明なソース) で java.io.FilterInputStream.read (不明なソース) com.sun.imageio.plugins.png.PNGImageReader.decodePass で(不明なソース) com.sun.imageio.plugins.png.PNGImageReader.decodeImage(不明なソース) ... 20 詳細