I have been trying to save a canvas image from my HTML page to an image file in Java Servlet. I need to send the image from HTML to Java Servlet through an Ajax request. Can someone please help me out? I have already tried out the following option
Here, request.getPart("myImg")
is returning null, hence this is not working. Please help me out.
I have also tried the following solution Sending content of canvas to java
The problem here is that it is giving me an exception of invalid literal/lengths set at the following line
BufferedImage bfi = ImageIO.read(new ByteArrayInputStream(decodedBytes));
Please help!!
UPDATE:
Here is my Ajax Code:
function uploadImage() {
var canvasServer = document.getElementById("canvasThumbResult");
var context = canvasServer.getContext("2d");
var imageDataURL = canvasServer.toDataURL('image/png');
var xhr = new XMLHttpRequest();
xhr.open("POST", trinityCvaServicesUrl+"common/uploadImage", true);
var boundary = Math.random().toString().substr(2);
xhr.setRequestHeader("content-type",
"multipart/form-data; charset=utf-8; boundary=" + boundary);
var multipart = "--" + boundary + "\r\n" +
"Content-Disposition: form-data; name=myImg\r\n" +
"Content-type: image/png\r\n\r\n" +
imageDataURL + "\r\n" +
"--" + boundary + "--\r\n";
xhr.send(multipart);
/*xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xhr.send("imgData="+imageDataURL);*/
}
And here is my Java Code:
FileOutputStream fos = null;
try {
Part part = req.getPart("myImg");
BufferedReader br = new BufferedReader(new InputStreamReader(
part.getInputStream(), Charset.forName("utf-8")));
/*String imgData = request.getParameter("imgData");
BufferedReader br = new BufferedReader(new InputStreamReader(
new ByteArrayInputStream(
imgData.getBytes(StandardCharsets.UTF_8)),
Charset.forName("utf-8")));*/
String sImg = br.readLine();
sImg = sImg.substring("data:image/png;base64,".length());
byte[] bImg64 = sImg.getBytes();
byte[] bImg = Base64.decodeBase64(bImg64);
fos = new FileOutputStream(ReloadableProps.getProperty("local.image.save.path")+"img.png");
fos.write(bImg);
/*String imgData = req.getParameter("imgData");
String img64 = imgData.replaceAll("data:image/png;base64,", "");
byte[] decodedBytes = DatatypeConverter.parseBase64Binary(img64 );
BufferedImage bfi = ImageIO.read(new ByteArrayInputStream(decodedBytes));
File outputfile = new File(ReloadableProps.getProperty("local.image.save.path")+"img.png");
ImageIO.write(bfi , "png", outputfile);
bfi.flush();*/
} catch (Exception e) {
e.printStackTrace();
String loggerMessage = "Upload image failed : ";
CVAException.printException(loggerMessage + e.getMessage());
} finally {
if(fos != null) {
fos.close();
}
}