• 카테고리

    질문 & 답변
  • 세부 분야

    보안

  • 해결 여부

    해결됨

12강 직접 제작하면서 배우는 JSP 기반의 파일 다운로드 기능에 대한 이해 강의에 관한 질문 입니다.

23.08.20 21:07 작성 조회수 424

0

질문 사항은 크게 2가지가 있는 상황 입니다.

  1. download1.jsp를 동작시키기 위해 index.jsp의 download1.jsp를 클릭하거나, http://localhost:8000/down/download1.jsp?org_filename=test.jpg&real_filename=1234.jpg을 직접 입력해도 '파일명을 입력 되지 않았습니다.' 라는 에러가 발생합니다.

    [에러 이미지]

    다운로드 JSP질문 이미지-1.png

  2. download1.jsp를 수정하고 wamp를 재시작해도 수정된 jsp 코드가 적용되지 않습니다.

 

먼저 1번 질문에 관한여 설명 드리갰습니다.

[download.jsp 코드]

(참고!! ';'다음에 주석 처럼 보이는 것들도 실제 코드 입니다.

예) ;history.back(-1);</script>"); 가 주석처럼 표시 되었는데, 실제로 동작하는 코드 입니다.)

<%@ page contentType="text/html; charset=UTF-8"  %>
<%@ page import="java.util.*, java.io.*"%>

 <%
 FileInputStream fis = null; 
 BufferedInputStream bis = null;
 BufferedOutputStream bos = null; 

String path = "C:\\Bitnami\\wampstack-8.1.4-0\\apache2\\htdocs\\down\\upload\\image\\";
String org_filename = request.getParameter("org_filename");
String real_filename = request.getParameter("real_filename");

if(org_filename == null || real_filename == null){
   out.println("<script>alert('파일명이 입력 되지 않았습니다.');history.back(-1);</script>");
   return;
}

try{
  File fd = new File(path + real_filename);
  if(!fd.exists()){
      out.println("<script>alert('파일이 존재 하지 않습니다.');history.back(-1);</script>");
      return;
  }
  response.setHeader("Content-Type", "application/octect-stream"); 
  response.setHeader("Content-Disposition", "attachment; filename=" + org_filename);
  
  fis = new FileInputStream(fd); 
  bis = new BufferedInputStream(fis); 
  bos = new BufferedOutputStream(response.getOutputStream()); 
  
  byte[] buffer = new byte[1024];
  int i = 0;
  
   while((i=(bis.read(buffer)))!= -1){
      bos.write(buffer, 0, i); 
   }
   bos.flush();
   } finally{
        if(fis != null) fis.close();
        if(bis != null) bis.close();
        if(bos != null) bos.close();
  }
%>

-> 현재 저는 이전 XSS 강의 때 사용한 bitnami 웹 서버를 이용하기 때문에 path의 URL 주소가 강사님의 하신 것과 다릅니다.

 

[path위치에 image파일이 존재]

--> 현재 path에 적어 넣은 경로인 C:\\Bitnami\\wampstack-8.1.4-0\\apache2\\htdocs\\down\\upload\\image\\ 아래에도 test.jpg 이미지를 넣은 상태 입니다.

 

그런데 브라우져에서 index.jsp에서

다운로드 JSP질문 이미지-2.png

--> 첨부파일1: 다운로드 링크를 누르면

--> 맨 처음 질문에 이미지에서 확인 할 수 있듯이

다운로드 JSP질문 이미지-1.png--> org_filename과 real_filename을 모두 URL에 입력 되었는데도, '파일명이 입력되지 않았습니다. ' 라는 경고 문이 발생합니다.

 

그래서 저는 URL에 직접 파일명을 입력하여 파일 다운로드를 시도 해 보았지만, 위와 동일한 에러 메시지만 확인 할 수 있었습니다.

 

제가 어떤 설정을 잘못 하였는지 알려주시면 수정하여 시도해 보도록 하겠습니다.

 

이제 질문2번에 대한 설명을 하겠습니다.

--> 코드가 정상적으로 동작하지 않은 원인을 찾기 위해 out.println 코드를 중간 중간에 넣었습니다.

--> 그리고 수정한 코드가 적용 되게 하기 우해 wamp를 재시작하였습니다.

--> WAMP 모니터에서 apache web server를 재시작하였지만

다운로드 JSP질문 이미지-1.png--> 여전히 파일명이 입력 되지 않았다는 경고 창과, 파일이 존재하지 않는다는 경고 창만 확인 가능하며, 제가 중간에 새로 삽입한 코드 경고 창은 확인 할수 없습니다.

--> 해당 내용에 대해서도 답변이 가능한지 궁금합니다.

 

 

답변 3

·

답변을 작성해보세요.

1

루시아제이님의 프로필

루시아제이

2023.12.12

고광우님 해결하셨나요? 저도 같은 문제를 겪고 있다가 해결했습니다!

 

경로 뒤에 \\를 안붙여서 해당 문제가 발생했던것 같습니다!

C:\\apache-tomcat-8.5.90-windows-x64\\apache-tomcat-8.5.90\\webapps\\ROOT\\upload\\image\\

이렇게 입력하면 경로가 올바르게 동작하여 파일 다운로드가 정상적으로 가능합니다!

고광우님의 프로필

고광우

질문자

2024.01.05

네 루시아제이님 답변 달아주셔서 감사합니다.

다행이 지금은 모두 해결되었습니다.
좋은 댓글 달아주셔서 감사합니다.

1

안녕하세요.

메일로 답변 완료하였습니다.


메일 답변:

real_filename 파라미터는 실제 서버 내 존재하는 파일명

org_filename 파라미터는 업로드 시 파일명

으로 사용됩니다.

따라서 지금 고광우님의 경우도 실제 업로드된 파일명은, 'test.jpg'로 real_filename 파라미터 값이 '1234.jpg'가 아닌 'test.jpg'로 세팅이 되어야 올바르게 다운로드가 진행됩니다.

고광우님의 프로필

고광우

질문자

2023.09.28

메일로 보내주신 사항으로 해결 완료 되었습니다.
빠른 답변과 해결 감사합니다.

1

제 강의에서 PHP와 JSP 2개의 환경에 대해 다루고 있으며,

위에서 언급하신 WAMP는 PHP 환경의 웹 서버를 구동하고 있습니다.

따라서 Tomcat 의 웹디렉터리로 jsp 파일을 옮기고 사용하셔야 합니다.

 

고광우님의 프로필

고광우

질문자

2023.08.23

안녕하세요. 크리핵티브님
빠른 답변 감사합니다. 그런데 문제가 하나 더 발생했습니다.

image--> 이번에는 파일이 존재하지 않는다고 에러가 나오고 있습니다.

 

image--> 이전에 답변을 주신 사항에서 tomcat 위치를 찾아서 jsp 코드를 업로드 했고 정상적으로 동작됨을 확인했습니다.

 

image--> 그런데 다운로드를 클릭하면 위에서 처음에 보여드린 바와 같은 에러 메시지가 보이면서 파일을 다운로드 하지 못하고 있습니다.

image--> 그런데 저는 tomcat 경로 아래에 이미지 파일을 넣은 상태 인데도 파일을 찾지 못하고 있습니다.

[이미지 파일 위치]

image

[download1.jsp에서 지정한 image위치]

image--> path에 입력한 경로 : "C:\\apache-tomcat-8.5.90-windows-x64\\apache-tomcat-8.5.90\\webapps\\ROOT\\upload\\image"

 

수고스러우시겠지만 위의 에러메시지가 발생하는 원인을 한 번 더 가르쳐 주시면 감사하겠습니다.