2012-03-15 2 views
1

Google App Engine을 통해 JSF에서 파일 업로드 요소를 가져 오려고합니다. 몇 가지 대안을 위해 웹을 탐색했지만 아무도 GAE에서 작동하지 않는 것으로 보입니다.GAE에서 JSF 파일 업로드

BlobstoreService를 사용하여 JSP와 서블릿을 사용할 수 있었지만 JSF와 함께 작동시킬 수있는 방법을 찾을 수 없었습니다.

해결 방법으로 JSF 내에 JSP를 포함 할 수있는 방법이 있는지 알아보기 위해 노력했지만이 방법도 유용하지 않다고 생각합니다.

실제 사례를 얻으시면 감사하겠습니다.

감사합니다. 모든

답변

1

첫째, 난 당신이 JSP로 수행하는 어떤 것은 결국뿐만 아니라 JSF와 함께 작동해야한다고 생각 ..

하지만,

당신이 JSF에 대한 파일 업로드 컴포넌트를 찾고 있다면, 그 작동 Primefaces File Upload Filter

: GAE에

는 GAE에서 작동하기 위해 무엇을해야하는지에 대한 설명을 가지고 다른 링크를 여기에 PrimeFaces FileUpload

를 살펴되어 가지고

4

먼저 가져 오기 라이브러리 http://code.google.com/p/gmultipart/을 (... 그것을 자신을 시도하지 않은) 및 프로젝트에 추가 할 수 있습니다. 그리고 org.primefaces.webapp.filter.FileUploadFilter 클래스를 오버라이드 (그냥 src에 넣는다). 클래스 org.primefaces.webapp.filter.FileUploadFilter의 코드가있다 :

public void handleFileUpload(FileUploadEvent event) { 
    UploadedFile uploadedFile = event.getFile(); 

    try { 
     String blobKey = BlobUtils.uploadImageToBlobStore(uploadedFile.getContentType(), uploadedFile.getFileName(), uploadedFile.getContents()); 
     this.iconKey = blobKey; 

    } catch (IOException e) { 
     log.log(Level.SEVERE, "Ошибка при попытке загрузить файл в blob-хранилище", e); 
     FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ошибка при попытке загрузить файл", event.getFile().getFileName() + " не загружен!"); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
     return; 
    } 

    FacesMessage msg = new FacesMessage("Успешно.", event.getFile().getFileName() + " загружен."); 
    FacesContext.getCurrentInstance().addMessage(null, msg); 

} 

그리고 모든 : 같은 관리 빈 쓰기 방법에

package org.primefaces.webapp.filter; 

    import java.io.File; 
    import java.io.IOException; 
    import java.util.logging.Level; 
    import java.util.logging.Logger; 

    import javax.servlet.Filter; 
    import javax.servlet.FilterChain; 
    import javax.servlet.FilterConfig; 
    import javax.servlet.ServletException; 
    import javax.servlet.ServletRequest; 
    import javax.servlet.ServletResponse; 
    import javax.servlet.http.HttpServletRequest; 

    import org.apache.commons.fileupload.FileItemFactory; 
    import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
    import org.apache.commons.fileupload.servlet.ServletFileUpload; 
    import org.gmr.web.multipart.GFileItemFactory; 
    import org.primefaces.webapp.MultipartRequest; 

    public class FileUploadFilter implements Filter { 

     private final static Logger logger = Logger.getLogger(FileUploadFilter.class.getName()); 

     private final static String THRESHOLD_SIZE_PARAM = "thresholdSize"; 

     private final static String UPLOAD_DIRECTORY_PARAM = "uploadDirectory"; 

     private String thresholdSize; 

     private String uploadDir; 

     public void init(FilterConfig filterConfig) throws ServletException { 
      thresholdSize = filterConfig.getInitParameter(THRESHOLD_SIZE_PARAM); 
      uploadDir = filterConfig.getInitParameter(UPLOAD_DIRECTORY_PARAM); 

      if(logger.isLoggable(Level.FINE)) 
       logger.fine("FileUploadFilter initiated successfully"); 
     } 

     public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { 
      HttpServletRequest httpServletRequest = (HttpServletRequest) request; 
      boolean isMultipart = ServletFileUpload.isMultipartContent(httpServletRequest); 

      if(isMultipart) { 
       if(logger.isLoggable(Level.FINE)) 
        logger.fine("Parsing file upload request"); 

       //start change 
       FileItemFactory diskFileItemFactory = new GFileItemFactory(); 
       /* if(thresholdSize != null) { 
        diskFileItemFactory.setSizeThreshold(Integer.valueOf(thresholdSize)); 
       } 
       if(uploadDir != null) { 
        diskFileItemFactory.setRepository(new File(uploadDir)); 
       }*/ 
       //end change 

       ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory); 
       MultipartRequest multipartRequest = new MultipartRequest(httpServletRequest, servletFileUpload); 

       if(logger.isLoggable(Level.FINE)) 
        logger.fine("File upload request parsed succesfully, continuing with filter chain with a wrapped multipart request"); 

       filterChain.doFilter(multipartRequest, response); 
      } else { 
       filterChain.doFilter(request, response); 
      } 
     } 

     public void destroy() { 
      if(logger.isLoggable(Level.FINE)) 
       logger.fine("Destroying FileUploadFilter"); 
     } 

    } 

은.