- form태그 속성에 enctype을 추가, name 값 설정하기
파일의 name은 image로 설정햇다
application/x-www-form-urlencoded
디폴트 값은 이거다. 서버로 전송되기 전에 url-encode 된다는 뜻.
text/plain
이건 인코딩을 하지 않은 문자 그대로의 상태를 전송한다는 의미
mutipart/form-data
파일 받으면서 설정해준게 이 값인데 이미지나 파일을 서버로 전송할 경우 이 방식을 사용한다고 한다.
- entity 변수 설정
jsp에서 받은 파일을 entity의 변수와 바로 매칭시킬 수 없기 때문에 다른 변수로 받는다
- entity 변수와 매칭시켜주기
file.getbytes()를 작성하면 오류가 발생하는데 그 이유는 메소드가 오류를 직접 처리하도록 설계 되어있기 때문이다.
다음과 같이 오류를 던져주고 controller에서 try catch로 오류를 처리한다.
물품1개 조회 (이미지 포함)
@Override
public Item selectOneItem(long code) {
try {
// 조건 물품번호가 일치하는 것 1개 가져오기
Query query = new Query();
Criteria criteria = Criteria.where("_id").is(code);
query.addCriteria(criteria);
// projection
query.fields().include("filedata", "filetype", "filesize");
return mongodb.findOne(query, Item.class);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
query, criteria(기준) - 아이디가 코드랑 같은 걸 찾아라.
projection: 들고갈 것과 버릴 것을 선택한다.
노드에서는 {projection: {filedata: 1, filetype:1, filesize:-1}}
혹은 {projection: {filedata: -1, filetype:-1, filesize:-1}}을 했었음
query.fields().exclude("filedata", "filetype", "filesize", "filename");
query.fields().include("filedata", "filetype", "filesize");
spring에서는 include, exclude로 한다.
이미지 조회이기 때문에 filedata, filetype, fileszie를 했음.
위의 DBimpl에서 정렬까지 끝내고 들고 갈 수 있지만,
Sort sort = Sort.by(Direction.DESC, "_id");
// Sort , Direction static임
// DESC는 내림차순 ASC 오름차순
// 뒤에껀 DB컬렉션 명
query.with(sort); // sort
return mongodb.find(query, Item.class);
아래와 같이 controller에서 sort를 쓸 수 있기 때문에 굳이 해서 들고갈 필요 없다.
@GetMapping(value = { "/image" })
public ResponseEntity<byte[]> imageGet(
@RequestParam(name = "code") long code) {
try {
Item item = itemDB.selectOneItem(code);
if (item.getFilesize() > 0) {// 이미지가 있음
HttpHeaders headers = new HttpHeaders();
if (item.getFiletype().equals("image/jpeg")) {
headers.setContentType(MediaType.IMAGE_JPEG);
} else if (item.getFiletype().equals("image/png")) {
headers.setContentType(MediaType.IMAGE_PNG);
} else if (item.getFiletype().equals("image/gif")) {
headers.setContentType(MediaType.IMAGE_GIF);
}
// 생성자 (실제데이터, headers, 200)
ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(
item.getFiledata(), headers, HttpStatus.OK);
return response;
} else { // 이미지가 없는 경우
// 데이터를 읽어들이는 객체
InputStream stream = resource.getResource("classpath:/static/img/default.png")
.getInputStream();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.IMAGE_PNG);
ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(
stream.readAllBytes(), headers, HttpStatus.OK);
return response;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}