해결된 질문
작성
·
626
0
질문 사항은 크게 2가지가 있는 상황 입니다.
download1.jsp를 동작시키기 위해 index.jsp의 download1.jsp를 클릭하거나, http://localhost:8000/down/download1.jsp?org_filename=test.jpg&real_filename=1234.jpg을 직접 입력해도 '파일명을 입력 되지 않았습니다.' 라는 에러가 발생합니다.
[에러 이미지]
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에서
--> 첨부파일1: 다운로드 링크를 누르면
--> 맨 처음 질문에 이미지에서 확인 할 수 있듯이
--> org_filename과 real_filename을 모두 URL에 입력 되었는데도, '파일명이 입력되지 않았습니다. ' 라는 경고 문이 발생합니다.
그래서 저는 URL에 직접 파일명을 입력하여 파일 다운로드를 시도 해 보았지만, 위와 동일한 에러 메시지만 확인 할 수 있었습니다.
제가 어떤 설정을 잘못 하였는지 알려주시면 수정하여 시도해 보도록 하겠습니다.
이제 질문2번에 대한 설명을 하겠습니다.
--> 코드가 정상적으로 동작하지 않은 원인을 찾기 위해 out.println 코드를 중간 중간에 넣었습니다.
--> 그리고 수정한 코드가 적용 되게 하기 우해 wamp를 재시작하였습니다.
--> WAMP 모니터에서 apache web server를 재시작하였지만
--> 여전히 파일명이 입력 되지 않았다는 경고 창과, 파일이 존재하지 않는다는 경고 창만 확인 가능하며, 제가 중간에 새로 삽입한 코드 경고 창은 확인 할수 없습니다.
--> 해당 내용에 대해서도 답변이 가능한지 궁금합니다.
답변 3
1
고광우님 해결하셨나요? 저도 같은 문제를 겪고 있다가 해결했습니다!
경로 뒤에 \\를 안붙여서 해당 문제가 발생했던것 같습니다!
C:\\apache-tomcat-8.5.90-windows-x64\\apache-tomcat-8.5.90\\webapps\\ROOT\\upload\\image\\
이렇게 입력하면 경로가 올바르게 동작하여 파일 다운로드가 정상적으로 가능합니다!
1
제 강의에서 PHP와 JSP 2개의 환경에 대해 다루고 있으며,
위에서 언급하신 WAMP는 PHP 환경의 웹 서버를 구동하고 있습니다.
따라서 Tomcat 의 웹디렉터리로 jsp 파일을 옮기고 사용하셔야 합니다.
안녕하세요. 크리핵티브님
빠른 답변 감사합니다. 그런데 문제가 하나 더 발생했습니다.
--> 이번에는 파일이 존재하지 않는다고 에러가 나오고 있습니다.
--> 이전에 답변을 주신 사항에서 tomcat 위치를 찾아서 jsp 코드를 업로드 했고 정상적으로 동작됨을 확인했습니다.
--> 그런데 다운로드를 클릭하면 위에서 처음에 보여드린 바와 같은 에러 메시지가 보이면서 파일을 다운로드 하지 못하고 있습니다.
--> 그런데 저는 tomcat 경로 아래에 이미지 파일을 넣은 상태 인데도 파일을 찾지 못하고 있습니다.
[이미지 파일 위치]
[download1.jsp에서 지정한 image위치]
--> path에 입력한 경로 : "C:\\apache-tomcat-8.5.90-windows-x64\\apache-tomcat-8.5.90\\webapps\\ROOT\\upload\\image"
수고스러우시겠지만 위의 에러메시지가 발생하는 원인을 한 번 더 가르쳐 주시면 감사하겠습니다.
네 루시아제이님 답변 달아주셔서 감사합니다.
다행이 지금은 모두 해결되었습니다.
좋은 댓글 달아주셔서 감사합니다.