자바 서블릿의 이미지 파일에 캔버스 이미지를 HTML 페이지에서 저장하려고했습니다. Ajax 요청을 통해 HTML에서 Java Servlet으로 이미지를 보내야합니다. 누군가 나를 도울 수 있습니까? 난 이미 때문에이 작동하지 않습니다, request.getPart("myImg")
가 null 반환, 다음과 같은 옵션 여기 자바 서블릿에서 캔버스 이미지를 png 이미지 파일로 저장
은 또한 다음과 같은 솔루션 Sending content of canvas to java
을 시도 여기에서의 문제는
BufferedImage bfi = ImageIO.read(new ByteArrayInputStream(decodedBytes));
도와주세요 다음 줄에를 설정 나에게 유효하지 않은 문자/길이의 예외를주고 있다는 것입니다! !
UPDATE :
여기내 아약스 코드 :
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);*/
}
그리고 여기 내 자바 코드 : 어떻게 든 이미지를 저장 관리해야
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 코드를 게시? – developerwjk
답변 해 주셔서 감사합니다. 내 질문에 아약스와 자바 코드를 게시했다. 제발 도와주세요. – ArinCool
또한 스택 추적을 게시하고 소스에서 스택 추적의 맨 위에있는 행을 표시해야합니다. 또는 위의 방법으로 작동하지 않는 방법을 지정하십시오. – haraldK