2012-09-22 5 views
2

jsp를 사용하여 mysql 데이터베이스에 파일을 업로드하고 싶습니다. 입력 유형 = "파일"을 사용하면 jsp가 전체 경로를 반환하지 않습니다. mysql db에 파일을 업로드하려면 전체 경로가 필요합니다.jsp를 사용하여 mysql 데이터베이스에 파일을 업로드하고 싶습니다

<form id="translationFormID" method="post" action="saveTranslation"> 

<input type="file" name="attachCV" id="attachCVID" value="Attach CV"> 

<input type="submit" name="submit" /> 

</form> 

이것은 내 JSP 페이지입니다. 나는 post 메소드를 사용하여 서블릿 'saveTranslation'을 호출한다.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

    String attachCV=null; 
    try{ 
     String attachCV=request.getParameter("attachCV"); 
     System.out.println("path= "+attachCV); 
    } 
    catch(Exception){ 
     e.printStackTrace(); 
    } 
} 

이것은 내 서블릿 코드입니다. 여기에서 attachCV 매개 변수를 가져오고 인쇄합니다. attachCV를 인쇄 할 때 'c : \ fakepath \ sample.docx'와 같은 내용이 표시됩니다.

+0

너는 우리의 허락을 받았어.:-) 당신이 시도한 것을 보여주는 코드를 전혀 게시하지 않았기 때문에 질문은 거의 닫힐 것입니다. 귀하의 질문에 대답 할 수있는 충분한 정보가 없습니다. 'input type = "file"을 사용하는 것만으로 서버에 저장 장소를 알려주지 않고 "전체 경로"를 클라이언트의 폴더에 저장합니다 (이는'입력 유형 '이 사용할 수있는 설정입니다). 서버에서는 의미가 없습니다 . –

+0

몇 가지 제안을하십시오. –

+0

같은 질문을 다시 게시하지 않으 셨다면 좋을 것입니다. 감사. – Kev

답변

4

mysql db에 파일을 업로드하려면 전체 경로가 필요합니다.

여기에는 큰 실수가 있습니다.

내가 파일을 업로드 할 클라이언트 오전 것을 상상해 당신 파일의 내용을 얻을 필요가 서버입니다. 귀하가 요청한대로 나의 완전한 로컬 디스크 파일 시스템 경로 c:\path\to\sample.docx만을 제공합니다. 어떻게 당신은 서버가되어 그 내용을 얻을거야? 로컬 하드 디스크 파일 시스템에 대한 TCP/IP 연결이 열려 있습니까? 정말?

이것은 파일 업로드 방법이 아닙니다. 서버가 에서 물리적으로 동일한 컴퓨터에서 클라이언트로 실행되는 경우에만이 작업이 수행되므로 해당 경로에 FileInputStream을 사용할 수 있습니다. 따라서 로컬 개발 환경에서만 작동하지만 실제로 서버가 클라이언트와 물리적으로 다른 시스템에서 실행되는 실제 환경에서는 HTTP 연결로 구분되지 않습니다.

클라이언트가 HTTP 요청 본문과 함께 보낸 내용 유일한 파일에 관심이 있어야합니다. HTML 형식의 경우 <form enctype="multipart/form-data">에서 <input type="file">을 사용할 수 있습니다. 전체 코드 예제에 대한 자세한 답변은 여기에서 찾을 수 있습니다 : How to upload files to server using JSP/Servlet?request.getPart()과 이전의 defacto 표준 Apache Commons FileUpload API를 사용하는 현대적인 Servlet 3.0 방식을 설명합니다. 당신이 올바른 방법으로 구현하면

, 당신은 궁극적으로 당신은 서블릿 3.0 part.getInputStream() 또는 아파치 코 몬즈는 FileUpload item.getInputStream()에서 얻은 파일 내용을 나타내는 InputStream와 끝까지해야한다. 그런 다음 PreparedStatement#setBinaryStream()을 DB에 저장하는 일반적인 방법과 ResultSet#getBinaryStream()을 사용하여 DB에서 검색 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 그것의 일 벌금. –

0

확실하게 enctype = "multipart/form-data"을 양식 태그에 추가해야합니다. 다음 코드는 문제를 해결합니다.

<form id="translationFormID" method="post" enctype="multipart/form-data" 
action="saveTranslation"> 
    <input type="file" name="attachCV" id="attachCVID" value="Attach CV"> 
    <input type="submit" name="submit" /> 
</form> 
+0

이것이 서블릿의 파일 내용을 읽는 데 어떻게 도움이됩니까? – Vikdor

0

당신은 서블릿에서 파일 내용을 읽을 수 MultipartRequest 같은 여러 부분 데이터 핸들러를 사용해야합니다. 클라이언트에 의해 반환 된 경로는 항상 클라이언트에 대한 로컬 경로가 될 것이므로 다중 경로 이외의 다른 방법으로는 파일을 읽을 수 없습니다. SO 자체에서 검색하여 여러 부분 요청 핸들러의 다른 대안을 찾을 수 있습니다.

관련 문제