업무를 하다보면 종종 Web에서 서버에 저장되어 있는 파일들을 보여주거나 다운로드할 일이 생깁니다.

 

그럴때 간단하게 하는 방법입니다.

 

일단 화면 부분에 a태그를 만듭니다.

<a href="javascript:;" id="btnPdf" onclick="viewPdf('값1', '값2')">불러오기</a>

 

다음은 script 부분 입니다.

function viewPdf(값1, 값2) {

        windows = window.open("/view/viewPdf", "viewPdf");

        let $form = $('<form></form>');
       
        $form.attr('action', "/view/viewPdf");
        $form.attr('method', 'get');
        $form.attr('target', 'viewPdf');
        $form.appendTo('body');
   
        let data_1 = $('<input type="hidden" value="' + 값1+ '" name="test1">');
        let data_2 = $('<input type="hidden" value="' + 값2+ '" name="test2">');
       
        $form.append(data_1);
        $form.append(data_2);
        $form.submit();

        return false;
}
 
 

다음은 Java 부분 입니다.

FileInputStream fis = null;
BufferedOutputStream bos = null;

   
    try {
        File pdfViewFile = new File(파일 저장 경로);

        response.setContentType("application/pdf");
           
        String fileName = URLEncoder.encode("PDF파일", "UTF-8");
 
        // 해당부분을 attachment; 로 하면 바로 다운로드, inline; 으로 하면 뷰어로 보여지게 됩니다.
        response.setHeader("Content-disposition", "inline; filename=" + fileName + ".pdf");
           
        fis = new FileInputStream(pdfViewFile);
        int size = fis.available();
        byte[] buf = new byte[size];
        int readCount = fis.read(buf);

        response.flushBuffer();
        bos = new BufferedOutputStream(response.getOutputStream());
        bos.write(buf, 0, readCount);
        bos.flush();
    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (fis != null) fis.close();
            if (bos != null) bos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
 
아래 블로그를 참조하여 만들었습니다.