【发布时间】:2014-07-31 12:50:22
【问题描述】:
我一直在尝试将我的 HTML 页面中的画布图像保存到 Java Servlet 中的图像文件中。我需要通过 Ajax 请求将图像从 HTML 发送到 Java Servlet。有人可以帮我吗?我已经尝试过以下选项
这里,request.getPart("myImg") 返回 null,因此这不起作用。请帮帮我。
我也尝试过以下解决方案 Sending content of canvas to java
这里的问题是它给了我一个例外 invalid literal/lengths set 在下一行
BufferedImage bfi = ImageIO.read(new ByteArrayInputStream(decodedBytes));
请帮忙!!
更新:
这是我的 Ajax 代码:
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);*/
}
这是我的 Java 代码:
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();
}
}
【问题讨论】:
-
与其链接到不同的问题,希望我们能猜出您是如何将他们的代码修补在一起的,为什么不发布您的 Ajax 代码?
-
感谢您的回复。我已经在我的问题中发布了 ajax 和 java 代码。请帮忙..
-
您也应该发布堆栈跟踪,并指出堆栈跟踪顶部对应于您的源代码中的哪一行。或者以其他方式说明上述方法不起作用。
-
在上面的 java 代码中,
req.getPart("myImg");对象为 null。因此,BufferedReader代码由于 NullPointerException 而失败。如果您需要更多信息,请告诉我。
标签: java html servlets image-processing canvas