Java

[Hybrid App / Web] JAVA File Download

솔솔 2021. 4. 8. 09:00
반응형

안녕하세요 : > 

 

오늘은 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/>

 

자세한 내용은 하단 참고해주세용 :> ( 저희 대리님 블로그예여 크크 )

eunoia3jy.tistory.com/27

 

[ 안드로이드 / Android ] 웹뷰(WebView) 파일 다운로드

안드로이드에서 웹뷰(WebView) 구현 시 파일 다운로드 기능을 추가하는 작업을 구현해 보았습니다. 작성한 파일 목록 입니다. 1. AndroidManifest.xml 2. WebViewActivity.java 3. file.jsp (웹소스) 4. FileContr..

eunoia3jy.tistory.com

 


자바 파일 업로드하는 방법이 궁금하다면

2021.04.09 - [Java] - [Hybrid App / Web] JAVA File Upload

 

 

글이 도움되었다면 구독과 공감 부탁드립니다👍👍

반응형