• 카테고리

    질문 & 답변
  • 세부 분야

    보안

  • 해결 여부

    미해결

[실습1-2] 직접 제작하면서 배우는 JSP 기반의 파일 다운로드 질문

21.11.22 01:05 작성 조회수 406

1

안녕하세요 크리핵티브님 파일 다운로드 jsp  기반의 파일 다운로드 질문이 있습니다. 

 

해당 영상을 보고 따라 하여 jsp 다운로드 소스코드를 작성하였는데 영상에서는 파일이 다운로드가 정상적으로 되었지만 

실제로 따라 하였을때에는 파일 다운로드가 되지 않고 

 

사이트에 연결할 수 없음

 

http://127.0.0.1:8080/download1.jsp?org_filename=11test.jpg&real_filename=1234.jpg의 웹페이지가 일시적으로 다운되었거나 새 웹 주소로 완전히 이동했을 수 있습니다.

 

이렇게 오류가 뜨는데 이럴때는 해결방법이 없으려나요 ?

 

해당 소스코드는 이러합니다. 

index.jsp 소스코드 

<%@ page contentType="text/html; charset=UTF-8" %>

<li>첨부파일1 : <a href="download1.jsp?org_filename=11test.jpg&real_filename=1234.jpg">[다운로드]</a></li>

<li>첨부파일2 : <a href="download2.jsp?path=image&org_filename=11test.jpg&real_filename=1234.jpg">[다운로드]</a></li>

<li>첨부파일3 : <a href="download3.jsp?path=C:\APM_Setup\Server\apache-tomcat-8.5.73\webapps\ROOT\upload\image&org_filename=11test.jpg&real_filename=1234.jpg">[다운로드]</a></li>

 

download1.jsp 소스코드 

<%@ 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:\\APM_Setup\\Server\\apache-tomcat-8.5.73\\webapps\\ROOT\\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();

}

%>

 

강의를 들으면서 똑같이 따라하였고 오타 부분도 확인하였으나 어느 부분에서 오류가 났는지 잘 이해가 안가 질문 드립니다.  제가 생각하기론 경로(path) 부분인거 같은데 어느 경로가 문제인지 잘 모르겠습니다..

소스코드 상 오류는 없고 해당 실습을 진행하게 되면

모든 실습 간에서 파일을 다운로드 할 수 없고 사이트에 연결할 수 없다고 하네요 경로를 역슬래쉬 혹은 슬래쉬 둘다 교체해서 수정하여도 결과는 똑같습니다. 

 

해당 톰켓을 재설치하여 적용해도 똑같이 나옵니다.. 

재설치만 10번 넘게 해봤는데도 결과는 똑같아서 글 남깁니다..  

감사합니다.

 

답변 1

답변을 작성해보세요.

0

안녕하세요.

우선 String path  변수의 경로가 제대로 되었는지 확인해보시구요.

if(fd.exists())

코드 부분은
if(!fd.exists())

로 수정해주세요.