받은 파일을 업로드 / 응답까지 직접설정해주는 업로드방식 / 다운로드
해당페이지는 파일을 업로드하면 해당파일이 본인이 설정한경로에 지정한후
아래에 저장한 사진을 업로드할수 있다는것이다.
이전에는 저장까지 하였다.
$({)} 요청을 통해서 파일에 저장한다 까지 했다
1) getLIst()생성
2)html 태그의 게시물업로드 부분을 script문에서 동적으로 생성한다
3)동적으로 생성되는 값은 getList()안의 $.getJSON의 ajax호출로 받아온다
= 구글링결과 JSON으로반환받는 ajax 인것같다
4) 서비스,서비스임플,맵퍼,맵퍼xml작성후 SnsBoardVO를 반환받는다
- bno를 키로 나머지를 값으로 받게도는 구조인것같다
5) for문으로 html을 동적으로생성하고 data의 파일을가져오는 순간에 새로운기능이 필요하다
-파일이 저장된 경로에 접근하는것에 관련된 문제가 있는것같다 확실히 정리는 되지않는ㄷ
5-1) src="view/파일경로/파일이름" 형식으로 html코드가 생성되게한다
5-2) 해당 요청을받는 controller를 생성한다
-@Response,@RequestMappint(value="view/{객체명}/{객체명}" 주입
-반환타입은 byte[] 매개변수는 @PathVariable로 받는다 ( ":.+" 를 넣어야 확장자명까지 받을수있다 ex) {fileName:.+ }
-byte[] result =null; 초기화후 try catch 구문에서 File file - new File(경로+폴더명);으로 받는다
- result변수에 FileCopyUtils.copyByteArray(file)로; 파일을 바이트로 변환후 반환한다
-반환된 데이터는 파일(여기선이미지)로 나타난다
6)getList()함수를 script문에서 즉시실행 그리고 등록버튼클릭시 한번더호출하게끔 설정한다
7) 다른방법으로는 직접 응답까지 설정해보낼수있다 위의내용에서
7-1) 반환타입을 ResponseEntity<byte[]>로 변경
7-2)HttpHeaders header = new HttpHeaders(); 생성후
7-3) header.add("Content-type" , Files.probeContentType(file.toPath());
-파일의 경로를 읽어 MIME타입(변환된 타입)을 헤더에저장)
7-4) 반환타입의 result변수에 = new ResponseEntoty(byte[]>(FileCopyUtils.copyByteArray(file),header, HttpStatis.OK);
- 각각 반환할데이터 ,응답헤더의 내용(아직 이해는안간다 어떤부분인지), 상태코드 이렇게 반환해준다
8) 마지막하나로
8-1) 위의 header.add("Content-type", Files.probeContentType(file.toPath() ));부분이
8-2) header.add("Content-Disposition", "attachment; filename="+ fileName);로 변경
-여기서 알수있는것은 Content타입이름에도 전부의미가있다 그리고 파일을받아오는 방식 처리하는방식이 다를수있다는것이다 이부분은 이해하기 어렵지만 왜냐하면 전달값과 반환값은 똑같은데 중간에 달라진부분이있고 설명불가능하기 때문이다.
우선 방법이 있다는걸로만 그리고 libary 처음부터 설정할때 사용하지않는 값 경로로인한 오류조심하기!