2012-03-15 59 views
1

我正在尝试在我的JSF上通过Google App Engine获取文件上传元素。 我浏览过几个替代网页,但没有一个与GAE一起使用。GAE上的JSF文件上传

我能够使用JSP和servlet与BlobstoreService一起使用,但无法找到使它与JSF一起工作的方法。

作为一种解决方法,我试图查看是否有方法在JSF中包含JSP,但我想这也是不可行的。

感谢你得到一个工作的例子。

谢谢!

回答

1

首先,我认为,无论你是用JSP做最终应与JSF合作以及..

,但

如果你正在寻找一个JSF文件上传组件,该工程在GAE上,

看一看的PrimeFaces FileUpload

这里是另一个链接上了,为了做什么说明其对GAE工作:Primefaces File Upload Filter

(还没有试过它自己...)

4

首先获得图书馆http://code.google.com/p/gmultipart/并添加到您的项目。 而不是覆盖类org.primefaces.webapp.filter.FileUploadFilter(只需放在你的src中)。 有类org.primefaces.webapp.filter.FileUploadFilter代码:

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"); 
     } 

    } 

在管理bean的write方法,如:

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); 

} 

这一切。