728x90
반응형
*도움이 되셨다면 광고 한번 클릭 부탁드립니다! 제게 큰 힘이됩니다! |
1.xhr 및 ajax
document.getElementById('paint-layer').toBlob(function(blob){
datas.paintblob = blob
getLoadData(url,datas,this.setTempStoreSuccess.bind(this))
}.bind(this))
paint-layer라는 캔버스에서 이미지를 뽑아서 blob형태로 만든훈
Formdata의 paintblob 이름으로 blob을 저장한다.
그후 getLoadData 함수를 통해 xhr를 전송한다.
function getLoadData(url,datas,callback){
const formdata = new FormData();
formdata.enctype='multipart/form-data';
formdata.method='post';
Object.entries(datas).forEach((data)=>{
formdata.append(data[0],data[1]);
})
const xhr = new XMLHttpRequest();
xhr.open("post", url, true);
xhr.onreadystatechange = function() { // 폴백
if (xhr.readyState == 4) {
if (xhr.status == 200) { // 200은 잘넘어왔단 것이다.
const data = JSON.parse(xhr.response);
callback(data);
} else {
alert("요청오류 : " + xhr.status);
}
}
}
// post방식은 xhr객체에 데이터를 붙여서 전송
xhr.send(formdata);
}
2.Spring Set mysql
@RequestMapping("/draw/data/temporaryStorageInfoBookData.do")
public ModelAndView temporaryStorageInfoBookData(HttpServletRequest request, HttpServletResponse response, ModelMap model,
@RequestParam Map<?, ?> commandMap,@RequestParam("paintblob") MultipartFile mfile) throws Exception {
MultipartFile을 통해 mfile 변수명을 선언해준다
HashMap<String,Object> InfoMap = new HashMap<String, Object>();
byte[] bytes;
try {
bytes = mfile.getBytes();
try {
java.sql.Blob blob = new javax.sql.rowset.serial.SerialBlob(bytes);
InfoMap.put("paintImage", blob);
}catch (SerialException e1) {
e1.printStackTrace();
}
}catch (java.io.IOException e3) {
e3.printStackTrace();
}
위와같이 mfile에서 받은 데이터를 Byte형태로 바꾼뒤 javax.sql.rowset.serial.SeraiBlob() 를 통해
blob 형태로 만든뒤
미리 정의한 InfoMap에 정의하여 serviceImpl로 보내준다.
3.Spring get mysql blob (mybatis)
<resultMap id="DrawFileresult" type="x.x.x.service.DrawFileVO">
...
...
<result column="object_imageBlob" property="objectImageBlob" jdbcType="BLOB" javaType="_byte[]"></result>
</resultMap>
sql.xml mapper의 resultMap을 생성한후
// draw
private byte[] objectImageBlob;
public byte[] getObjectImageBlob() {
return objectImageBlob;
}
public void setObjectImageBlob(byte[] objectImageBlob) {
this.objectImageBlob = objectImageBlob;
}
위와 같은 DrawFileVO를 생성해준다.
List<Map<String,DrawFileVO>> tempObjectData = drawFigureService.selectBookTemporaryObjectInfo(paramMap);
byte[] encoded = null;
for(int i=0;i<tempObjectData.size();i++) {
DrawFileVO data= (DrawFileVO) tempObjectData.get(i);
System.out.println(data);
if(data.getObjectIsbackground().equals("PAINT")) {
encoded = org.apache.commons.codec.binary.Base64.encodeBase64(data.getObjectImageBlob());
}
}
String encodedString = new String(encoded);
...
modelAndView.addObject("tempObjectPaint",encodedString);
그후에 리스트 및 MAP<String,DrawFileVO> 형식으로된 데이터들을 받아온후
리스트에서 하나씩 뽑아서 byte로 된 blob데이터를
org.apache.commons.codec.binary.Base64.encodeBase64(data.getObjectImageBlob());
를 통해서 base64로 변환시킨후
addObject를 통하여 View단으로 넘긴다
4.Base 64 View 출력
const base64 = `data:image/png;base64,${tempPaintData}`
const paintImage = new Image();
paintImage.src = base64;
마지막으로 컨트롤러에서 전달받은 base64데이터를 "data:image/png;base64" 와 혼합하여
이미지를 생성한뒤 출력하면된다.
728x90
반응형
'Spring' 카테고리의 다른 글
SPRING BOOT을 이용한 쇼핑몰 만들기(Chapter1) - 스프링 환경셋팅 *with intellij,jsp,mybatis,tomcat,postgreSql (0) | 2022.05.16 |
---|---|
Spring boot[maven] - profile에 따른 application.yml 파일 설정 및 암호화 (0) | 2022.02.04 |
javascript xhr // spring // jsonarray Data 전송 (0) | 2021.05.04 |
[스프링(Spring)] 스프링이란 무엇인가!? -1 (0) | 2021.02.19 |
POJO란 도대체 무엇인가? (0) | 2020.04.22 |
댓글