첨부파일을 다운로드까지 하기 위해서는 Http 응답정보 셋팅필요. ( 요청Path )
컨트롤러
//첨부파일 다운로드 ( @PathVariable ; path에서 변수로 쓰겠다)
@RequestMapping("dealDownload/{member_id}/{deal_number}/{dealFile_number}")
public ResponseEntity<UrlResource> downloadFile(@PathVariable String member_id, @PathVariable int deal_number, @PathVariable int dealFile_number, HttpSession session) throws MalformedURLException, FileNotFoundException, UnsupportedEncodingException {
// ResponseEntity<UrlResource> 란? HttpEntity / ResponseEntity 상속받고있음
// HttpEntity란? Http의 요청과 응답을 관리하는 객체(요청헤더,바디,응답헤더,바디)
// ResponseEntity란? 응답데이터를 관리하는 객체 (Http헤더, Http바디, Http상태정보)
// UrlResource란? 첨부파일 다운로드되는파일객체를 다루기 위해 스프링내부에서 사용하는 객체
// 사용자가 링크를 클릭할때 이것은 일반html열기가 아니라 파일을 다운로드 하는것이고,
// 결국 스프링에있는 File os를 통해서 꺼내게 되는데, 그 File os를 관리하는게 urlResource
//System.out.println("첨부파일 다운로드 파라미터 체크 : member_id" + member_id +", " + deal_number+", " + dealFile_number );
//전달받은 파라미터(글번호,파일번호) 이용해서 파일조회 후, 가져오기
DealFile_DTO selectFile = service.getFile(deal_number, dealFile_number);
//System.out.println("첨부파일 다운로드 체크: "+ service.getFile(deal_number, dealFile_number));
//파일명을 이용해서 다운로드할 파일을 객체로 생성하기
//UrlResource resource = new UrlResource("file:" + 파일의 전체경로) +@ 업로드될 서버의 경로(Path가 필요)
UrlResource resource = new UrlResource("file:" + WebUtils.getRealPath(session.getServletContext(), "/WEB-INF/dealUpload/"+selectFile.getStoreFilename()));
//파일명에 한글이 있는경우 오류 발생치 않도록 처리
//String encodeFilename = UriUtils.encode(파일이름, "UTF-8");
String encodeedFilename = UriUtils.encode(selectFile.getOriginalFilename(), "UTF-8");
String mycontenttype = "attachment; filename=\"" + encodeedFilename + "\""; // \" = "넣기위해
return ResponseEntity.ok() //.ok는 BodyBuilder 사용하며, 정상적으로 200번으로 실행됬을때를말함
.header(HttpHeaders.CONTENT_DISPOSITION, mycontenttype) //.header(헤더명,헤더value) // 헤더명 : HttpHeaders.CONTENT_DISPOSITION는 실제 response body의 타입이 뭔지 알려줌(즉 헤더에서, 이건 다운로드야 알려줌)
.body(resource); //바디에 실제 다운로드될 resource 넣어줌
}
DAOImpl
//첨부파일 가져오기(다운로드)
@Override
public DealFile_DTO getFile(int deal_number, int dealFile_number) {
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("deal_number", deal_number);
map.put("dealFile_number", dealFile_number);
System.out.println("DAOImpl map체크 : " + map);
return sqlSession.selectOne("com.multi.ongo.deal.getFile", map);
}
mybatis mapper
<!-- 첨부파일 가져오기(다운로드) -->
<select id="getFile" parameterType="Map" resultType="fileDTO">
select * from deal_file
where deal_number=#{deal_number} and dealFile_number=#{dealFile_number}
</select>
read.jsp
<c:forEach var="file" items="${filedtolist}" >
<label for="HOFS_DTADR"><a href="/ongo/dealDownload/${dealRead.member_id}/${dealRead.deal_number}/${file.dealFile_number}">${file.originalFilename}</a></label><br/>
</c:forEach>
'스프링MVC' 카테고리의 다른 글
json (0) | 2023.01.18 |
---|---|
ajax (0) | 2023.01.18 |
@PathVariable 사용 (0) | 2023.01.18 |
스프링-파일업로드(1) 작업흐름 (mybatis사용) (0) | 2023.01.18 |
스프링-파일업로드(1) 작업흐름 (mybatis사용) (0) | 2023.01.16 |