2011-03-09 5 views
2

서블릿자바 - 파일 업로드 문제

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.util.Iterator; 
import java.util.List; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.*; 

public class Apply extends HttpServlet 
{ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
          throws ServletException, IOException 
    { 
     InputStreamReader input = new InputStreamReader(request.getInputStream()); 
     BufferedReader buffer = new BufferedReader(input); 
     String line=""; 
     line=buffer.readLine(); 

     System.out.println("Multipart data " + line); 

     boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
     if(isMultipart) 
     { 
      // upload file 
     } 
     else 
     { 
      // failed, no input 
     } 
    } 

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

JSP.

부울과 입력은 항상 false/null로 확인되므로 이유를 알 수 없습니다. 이 안내서 다음 :

web-inf/lib - 우리는 commons-fileupload-1.2.2.jar 및 commons-io-2.0.1.jar가 있습니다.

아이디어가 있으십니까?

+1

블로그의 소개 텍스트는 [mine] (http://balusc.blogspot.com/2007/11/multipartfilter.html)의 ripoff입니다. 링크를 언급 해 주셔서 감사합니다. – BalusC

답변

3

실제로 양식을 제출하지 않았습니다. GET 요청 페이지로 이동 중입니다.

전송] 버튼을 사용하여 "제출"앵커 교체 :

<button type="submit" class="jUiButton">Submit</button> 

당신은 <a>을 유지할 수 있지만, 당신은 수동으로 JavaScript를 사용하여 양식을 제출해야합니다.

+0

JavaScript로 변경되었습니다. 그의 서블릿의'doPost()'가 어떻게 호출 되었습니까? – BalusC

+3

@BalusC : 그의'doGet()'이'doPost()'를 호출하기 때문입니다. – Jeremy

1

미리 HttpServletRequest#getInputStream()을 읽어야합니다. 한 번만 읽을 수 있습니다. Commons FileUpload는 미리 읽은 경우 더 이상 읽을 수 없습니다. ServletFileUpload#isMultipartContent() 줄까지 서블릿의 모든 줄을 제거하십시오.

-1

당신이 팔로우중인 안내서가 오래된 것입니다 (2008). 이것이 새로운 프로젝트 인 경우 주석 기반 접근 방식으로 시작하는 것이 좋습니다. This guide (2010)을 따르는 것이 좋습니다.

@Controller 
public class FileUploadContoller { 
    @RequestMapping(value = "/fileupload", method = RequestMethod.POST) 
    @ResponseStatus(HttpStatus.OK) 
    @ResponseBody 
    public String ingest(@RequestParam("file") final MultipartFile file) throws Exception { 
     if (file.isEmpty()) { 
      System.out.println("empty"); 
     } else { 
      System.out.println("not empty"); 
     } 

     // do something with file.getBytes() 

     return("ok"); 
    } 
} 

이 만 컨트롤러와 적절한 Spring 설정을 추가해야합니다 : 파일 업로드 컨트롤러는 다음과 같을 것이다. 이 길로 가고 싶으면 더 도울 수 있습니다.