@GetMapping(value="/download", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@ResponseBody
public ResponseEntity<Resource> downloadFile(String fileName){
HttpHeaders headers = new HttpHeaders();
try{
headers.add("content-Disposition", "attachment; filename=new String(resourceName.getBytes("UTF-8"),"ISO-8859- 1")); //아래의 3번째 방법
}catch(UnsupportEncodingException e){
e.printStackTrace();
}
return new ResponseEntity<Resource>(resource, headers, Https.OK);
}
https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/Content-Disposition
Content-Disposition: inline
Content-Disposition: attachment
Content-Disposition: attachment; filename="filename.jpg"
disposition을 inline으로 설정했을땐,
header.add("Content-Type", Files.probeContentType(file.toPath())); 와 같이 이미지를 보여주기만 했다.
attachment를 하였을땐 파일명을 download로하여 보여주었고
headers.add("content-Disposition", "attachment; filename=new String(resourceName.getBytes("UTF-8"),"ISO-8859- 1"));을 하였을때 파일명을 보여주었다.
3번째 방법이 가장 이상적인듯.
또, File클래스는 리턴시 byte[] 타입으로 변환하여
Files.copyToByteArray(file)로 리턴,
Resource는
Resource resource = new FileSystemResource("c:\upload\" + fileName); 으로 객체를 만들고, 바로 리턴.
File과 Resource 클래스의 목적은 자바 언어를 통해 저장장치에 존재하는 파일을 읽어오는것.
차이점은 지금 당장의 검색으로는 찾지 못하여 개인적으로 공부해야겠다.
https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/resources.html