Suggestion on Rich fileupload Multipart Filter, uploading large files and createTempFiles property
valatharv Feb 24, 2011 11:57 AMHi,
I am using rich file upload component and need to allow user to upload 50 MB+(approximately) files and able to persist small files.
Environment : jboss-4.2.3, jboss-seam-2.0.2.SP1, Rich Faces - version 3.3.1.GA
Issue/ Suggestion:
1) Please suggest best approach to define multipart filter. (web and components.xml are below)
2) Error : I am getting following error on this method when I try to upload large files....
3) createTempFiles property : While uploading files are uploaded "C:\WINNT\Temp", even if I set it to false...
a) Web.xml : I have added Ajax4jsf Filter in web.xml
b) Components.xml
Added :
xmlns:web="http://jboss.com/products/seam/web"
xsi:schemaLocation=...
http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.0.xsd"
and
<web:multipart-filter create-temp-files="false" max-request-size="2147483647" url-pattern="*.seam" />
2) Error : I am getting following error on this method when I try to upload large files....
public void paint(OutputStream stream, Object object) throws IOException { stream.write((byte [])(fileWrapper.getFileList().get((Integer) object)).getFileData()); } This error is not during persist event (i.e. not during Save click) but it is from upload component, when I click "Upload" after adding files.
javax.el.ELException: /FileUploadEdit.xhtml @79,90 createContent="#{fileUploadManager.paint}": ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:74) at org.ajax4jsf.resource.UserResource.send(UserResource.java:110) ..... Caused by: ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358) at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:354) at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381) at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370) at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89) at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:83) at com.test.session.FileUploadManagerBean.paint(FileUploadManagerBean.java:45)
3) createTempFiles property : While uploading files are uploaded "C:\WINNT\Temp", even if I set it to false...
i.e. web:multipart-filter create-temp-files="false"...
How can I avoid creating files under temp directory due to space issue.... OR is there any event/attribute which I can use to clear Temp after upload or final persist.
Here is XHMTL, web.xml and components.xml.
XTML code :
<h:form id="fileUpload" styleClass="edit" enctype="multipart/form-data"> <s:decorate id="fileDataDecoration" template="layout/edit.xhtml"> <h:panelGrid columns="2" columnClasses="top,top"> <rich:fileUpload fileUploadListener="#{fileUploadManager.listener}" maxFilesQuantity="#{fileUploadManager.uploadsAvailable}" id="upload" noDuplicate="true" immediateUpload="false" acceptedTypes="*"> <a4j:support event="onuploadcomplete" reRender="info" /> </rich:fileUpload> <h:panelGroup id="info"> <rich:panel bodyClass="info"> <f:facet name="header"> <h:outputText value="Uploaded Files Info" /> </f:facet> <h:outputText value="No files currently uploaded" rendered="#{fileUploadManager.fileWrapper.fileList.size==0}" /> <rich:dataGrid columns="1" value="#{fileUploadManager.fileWrapper.fileList}" var="file" rowKeyVar="row"> <rich:panel> <h:panelGrid columns="2"> <a4j:mediaOutput element="img" mimeType="#{file.fileType}" createContent="#{fileUploadManager.paint}" value="#{row}" style="width:50px; height:50px;" cacheable="false"> <f:param value="#{fileUploadManager.timeStamp}" name="time"/> <s:conversationId /> </a4j:mediaOutput> <h:panelGrid columns="2"> <h:outputText value="File Name:" /> <h:outputText value="#{file.fileName}" /> <s:link value="#{file.fileName}">Download</s:link> <h:outputText value="File Length(bytes):" /> <h:outputText value="#{file.fileLength}" /> </h:panelGrid> </h:panelGrid> </rich:panel> </rich:dataGrid> </rich:panel> <rich:spacer height="3"/> <br /> <a4j:commandButton action="#{fileUploadManager.clearUploadData}" reRender="info, upload" value="Clear Uploaded Data" rendered="#{fileUploadManager.size>0}" /> </h:panelGroup> </h:panelGrid> </s:decorate> </h:form>
Components.xml
<components xmlns="http://jboss.com/products/seam/components" xmlns:core="http://jboss.com/products/seam/core" xmlns:persistence="http://jboss.com/products/seam/persistence" xmlns:drools="http://jboss.com/products/seam/drools" xmlns:bpm="http://jboss.com/products/seam/bpm" xmlns:security="http://jboss.com/products/seam/security" xmlns:mail="http://jboss.com/products/seam/mail" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:web="http://jboss.com/products/seam/web" xsi:schemaLocation= "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.0.xsd http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.0.xsd http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.0.xsd http://jboss.com/products/seam/bpm http://jboss.com/products/seam/bpm-2.0.xsd http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.0.xsd http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.0.xsd http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.0.xsd"> ... <web:multipart-filter create-temp-files="false" max-request-size="2147483647" url-pattern="*.seam" /> <core:manager concurrent-request-timeout="5000" conversation-timeout="180000" conversation-id-parameter="cid" parent-conversation-id-parameter="pid"/>
Web.xml
<?xml version="1.0" ?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!-- Ajax4jsf --> <filter> <display-name>Ajax4jsf Filter</display-name> <filter-name>ajax4jsf</filter-name> <filter-class>org.ajax4jsf.Filter</filter-class> <init-param> <param-name>forceparser</param-name> <param-value>false</param-value> </init-param> </filter> <filter-mapping> <filter-name>ajax4jsf</filter-name> <servlet-name>Faces Servlet</servlet-name> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> </filter-mapping> <context-param> <param-name>org.richfaces.SKIN</param-name> <param-value>blueSky</param-value> </context-param> <!-- Seam --> <listener> <listener-class>org.jboss.seam.servlet.SeamListener</listener-class> </listener> <filter> <filter-name>Seam Filter</filter-name> <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class> </filter> <filter-mapping> <filter-name>Seam Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>Seam Resource Servlet</servlet-name> <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Seam Resource Servlet</servlet-name> <url-pattern>/seam/resource/*</url-pattern> </servlet-mapping> <!-- Facelets development mode (disable in production) --> <context-param> <param-name>facelets.DEVELOPMENT</param-name> <param-value>true</param-value> </context-param> <!-- JSF --> <context-param> <param-name>javax.faces.DEFAULT_SUFFIX</param-name> <param-value>.xhtml</param-value> </context-param> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.seam</url-pattern> </servlet-mapping> <security-constraint> <display-name>Restrict raw XHTML Documents</display-name> <web-resource-collection> <web-resource-name>XHTML</web-resource-name> <url-pattern>*.xhtml</url-pattern> </web-resource-collection> <auth-constraint/> </security-constraint> </web-app>