2013-04-01 1 views
0

GWT를 처음 접했고 최선의 프로그래밍 관행이 무엇을 하려는지 확실하지 않습니다. 내 웹 응용 프로그램에서 사용자는 데이터 파일을 업로드 할 수 있고, 내 응용 프로그램은이 파일에 액세스 할 수 있어야하고, 일부 작업을 수행 한 다음 사용자가 조작 된 파일을 다운로드 할 수 있어야합니다.GWT 모범 사례 업로드/다운로드

지금까지 내가 성공적으로 doPost 메소드에 업로드 서블릿과 파일을 업로드 할 수 있었다 : 내 전쟁 폴더에 보면

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 

    try { 
     DiskFileItemFactory fileItemFactory = new DiskFileItemFactory(); 
     ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory); 
     fileUpload.setSizeMax(FILE_SIZE_LIMIT); 

     List<FileItem> items = fileUpload.parseRequest(req); 

     for (FileItem item : items) { 
      if (item.isFormField()) { 
       logger.log(Level.INFO, "Received form field:"); 
       logger.log(Level.INFO, "Name: " + item.getFieldName()); 
       logger.log(Level.INFO, "Value: " + item.getString()); 
      } else { 
       logger.log(Level.INFO, "Received file:"); 
       logger.log(Level.INFO, "Name: " + item.getName()); 
       logger.log(Level.INFO, "Size: " + item.getSize()); 
      } 

      if (!item.isFormField()) { 
       if (item.getSize() > FILE_SIZE_LIMIT) { 
        resp.sendError(HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE, "File size exceeds limit"); 

        return; 
       } 
       String fileName = item.getName(); 
       if (fileName != null) { 
        fileName = FilenameUtils.getName(fileName); 
       } 
       fileName = getServletContext().getRealPath("/uploadedFiles/" + fileName); 

       byte[] data = item.get(); 
       FileOutputStream fileOutSt = new FileOutputStream(fileName); 
       fileOutSt.write(data); 
       fileOutSt.close(); 

       if (!item.isInMemory()) 
        item.delete(); 
      } 
     } 
    } catch (Exception e) { 
     logger.log(Level.SEVERE, "Throwing servlet exception for unhandled exception", e); 
     throw new ServletException(e); 
    } 
} 

의 uploadedFiles 폴더가 성공적으로 생성되고 파일이 넣어 .

이 시점에서 나는 조금 붙어 있었지만 연구를 해왔으나 클라이언트 측에서 업로드 된 파일에 액세스하기 위해 가장 좋은 방법은 무엇인지 명확하고 간결한 대답을 찾을 수없는 것 같습니다. 사용자가 다운로드 할 수있게하십시오. 어쩌면 나는이 잘못에 접근하고있다, 확실하지 않다. 누군가가 올바른 방향으로 나를 가르키거나 좋은 일을 할 올바른 방법의 좋은 예를 보여줄 수 있다면, 고마워요.

+0

사용자가 다운로드하기 전에 파일을 편집 할 수 있습니까 ?? –

+0

@ 당신이 관리하고자하는 파일이 어떤 유형입니까? –

답변

0

나는 나의 문제를 해결했다. 파일이 성공적으로 업로드되면 파일 이름을 저장했습니다. 나중에 RPC를 사용하여 서버의 파일에 액세스했습니다. 파일 이름을 RPC에 전달하여 작업중인 파일을 알게 된 다음 업로드 폴더에서 해당 파일을 찾습니다. 그래서 java 파일을 다음과 같이 만들 수 있습니다.

File file = new File((this.getServletContext().getRealPath("uploadedFiles") + File.separator + fileName)); 

내가 어떻게 보이는지 조작합니다.

0

클라이언트 측 파일에 액세스하려면 doGet 메소드를 사용하는 새 서블릿 또는 동일한 서블릿이 필요합니다.

클라이언트는 파일 유형에 따라 Anchor 또는 Image을 통해 파일을 요청해야하지만 서버가 파일을 식별 할 수 있도록 매개 변수를 추가해야합니다. 일반적으로 업로드에 사용한 FileInput의 이름을 사용하거나 서버에서 태그를 반환 할 수 있습니다.

나는 당신에게 gwt-upload을 시도해 볼 것을 권합니다. 그러면 많은 시간을 절약 할 수 있습니다.

+0

이미 moxiegroup gwt 업 로더를 사용하여 업로드 할 수 있습니다. http://www.moxiegroup.com/moxieapps/gwt-uploader/ 그러나 이제 파일이 업로드되었으므로 사용하기 위해 정보를 추출해야합니다. 클라이언트 쪽. 클라이언트 측에서 업로드 된 파일에 접근하는 가장 좋은 방법은 무엇입니까 – Will

+0

moxiegroup의 라이브러리는 사용한 적이 없지만 gwt-upload 라이브러리를 사용하면 uploader 객체가 URL을 반환하여 업로드 된 파일 인 uploader.fileUrl()을 얻을 수 있습니다. –