반응형
안녕하세요 : >
오늘은 java에서 file 다운로드 하는 방법을 소개해드리겠습니다.
일단 다운로드 버튼을 클릭했을 때 f_downloadUrl 함수를 호출해준다는 가정하에 진행할게요.
function f_downloadUrl( filePath, fileNm ){
location.href = "download.do?filePath=filePath&fileNm=fileNm";
}
filePath와 fileNm을 자바 단으로 전달합니다.
받은 경로와 파일명으로 다운로드가 가능합니다!
@RequestMapping(value="/fileDownload.do")
public ResponseEntity<InputStreamResource> fileDownload(@RequestParam String filePath, @RequestParam String fileNm) throws FileNotFoundException, IOException {
// 넘어온 파일명으로 확장자를 뽑아냅니다.
String fileType = fileNm.substring(fileNm.lastIndexOf(".")).trim();
String mineType = "";
ResponseEntity<InputStreamResource> res = null;
// 확장자에 맞는 mineType 저장
if ( fileType.equals(".hwp") ) {
mineType = "application/x-hwp";
} else if ( fileType.equals(".pdf") ) {
mineType = "application/pdf";
} else if ( fileType.equals(".doc") || fileType.equals(".docx") ) {
mineType = "application/msword";
} else if ( fileType.equals(".xls") || fileType.equals(".xlsx") ) {
mineType = "application/vnd.ms-excel";
} else if ( fileType.equals(".ppt") || fileType.equals(".pptx") ) {
mineType = "application/vnd.ms-powerpoint";
} else if ( fileType.equals(".zip") ) {
mineType = "application/zip";
} else if ( fileType.equals(".jpeg") || fileType.equals(".jpg") || fileType.equals(".png") || fileType.equals(".PNG")) {
mineType = "application/jpeg";
} else if ( fileType.equals(".txt") ) {
mineType = "application/plain";
} else {
mineType = "application/jpeg";
}
URL url = null;
URLConnection conn = null;
try {
//다운로드 url 연결
String fileURL = filePath + "/" + fileNm;
url = new URL(fileURL);
conn = url.openConnection();
int size = conn.getContentLength();
String fileNm = new String(fileNm.getBytes("UTF-8"), "UTF-8");
InputStreamResource isr = new InputStreamResource(url.openStream());
// request 요청에 대한청에 대한 답변을 보내기 위한 작업
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType(mineType) );
headers.add("Access-Control-Allow-Origin", "*" );
headers.add("Access-Control-Allow-Methods", "GET, POST, PUT" );
headers.add("Access-Control-Allow-Headers", "Content-Type" );
headers.add("Content-Disposition", "attachment; filename="+fileNm+";" );
headers.add("Cache-Control", "no-cache, no-store, must-revalidate" );
headers.add("Set-Cookie", "fileDownload=true; path='/" );
headers.add("Pragma", "no-cache" );
headers.add("Expires", "0" );
headers.setContentLength(size);
res = new ResponseEntity<InputStreamResource>(isr, headers, HttpStatus.OK);
} catch ( FileNotFoundException e ) {
throw e;
} catch ( IOException e ) {
throw e;
}
return res;
}
** Hybrid App의 경우 native에서도 작업이 필요합니당!
AndroidManifest.xml에 파일 접근 권한 추가
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
자세한 내용은 하단 참고해주세용 :> ( 저희 대리님 블로그예여 크크 )
자바 파일 업로드하는 방법이 궁금하다면
2021.04.09 - [Java] - [Hybrid App / Web] JAVA File Upload
글이 도움되었다면 구독과 공감 부탁드립니다👍👍
반응형
'Java' 카테고리의 다른 글
[JAVA] FCM 프로젝트 생성 및 JAVA에서 PUSH 보내는 방법 (6) | 2021.06.14 |
---|---|
[JAVA ] File Upload 하는 방법 (0) | 2021.04.09 |
[JAVA] HttpURLConnection Post 방식으로 처리하기 (1) | 2021.04.06 |
[JAVA] HttpURLConnection Get 방식으로 처리하기 (0) | 2021.04.05 |
[javascript] 공백 제거 함수 trim / replace (0) | 2021.04.04 |