官网关于fileupload标签的说明:http://docs.jboss.org/richfaces/3.3.2.GA/en/devguide/html/rich_fileUpload.html
首先,这里使用的版本是:3.3.2sr1,使用richfaces组件先得加入相关包,
其中用到了facelets,所以有jsf-facelets.jar
web.xml中的richfaces过滤器
<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
<!--初始化参数在这里配置-->
</filter>
<filter-mapping>
<filter-name>richfaces</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
上传bean(FileUploadBean):
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import org.richfaces.event.UploadEvent;
import org.richfaces.model.UploadItem;
/**
*
* @author Administrator
*/
public class FileUploadBean {
/** Creates a new instance of FileUploadBean */
public FileUploadBean() {
}
private ArrayList<File> files = new ArrayList<File>();
private int uploadsAvailable = 5;
private boolean autoUpload = false;
private boolean useFlash = false;
public int getSize() {
if (getFiles().size()>0){
return getFiles().size();
}else
{
return 0;
}
}
public void paint(OutputStream stream, Object object) throws IOException {
stream.write(getFiles().get((Integer)object).getData());
}
public void listener(UploadEvent event) throws Exception{
UploadItem item = event.getUploadItem();
File file = new File(); //自己定义的类型,不IO包中的File
file.setLength(item.getFileSize());
file.setName(item.getFileName());
file.setData(item.getData());
files.add(file);
uploadsAvailable--;
}
}
在faces-config.xml中配置:
<faces-config version="1.2"
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-facesconfig_1_2.xsd">
<!--如果不使用facelets下面的FaceletViewHandler可以注解-->
<application>
<view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
</application>
<managed-bean>
<managed-bean-name>fileUploadBean</managed-bean-name>
<managed-bean-class>com.FileUploadBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>
页面组件:
<rich:fileUpload
maxFilesQuantity="3"
noDuplicate="true"
fileUploadListener="#{fileUploadBean.listener}"
addControlLabel="Add file..."
clearAllControlLabel="Clear all"
clearControlLabel="Clear"
stopEntryControlLabel="Stop process"
uploadControlLabel="Upload file"
id="upload"
immediateUpload="false"
acceptedTypes="jpg, gif, png, bmp" allowFlash="true">
<f:facet name="label">
<h:outputText value="{_KB}KB from {KB}KB uploaded --- {mm}:{ss}" />
</f:facet>
</rich:fileUpload>
属性说明:noDuplicate="true" 本次上传的文件中不能有重复文件
acceptedTypes="jpg, gif, png, bmp" 上传所允许的文件格式,这个格式就是个结尾字符串而已,你把一个不是图片的文件改成这样的文件照样是可以上传的
allowFlash="true" 在打开的文件选择窗口中自动筛选符合文件格式(acceptedTypes)的文件
这里要注意的fileUploadBean.listener方法
在这个方法里面
UploadItem item = event.getUploadItem();
有几个文件就要调用几次listener方法,除非调用一次得到所有文件,而且我们得知道在调用这个方法之前文件已经存在于服务上了(以内存或者临时文件的形式)。如果有三个文件要上传,并不是说三个都在了,而是轮到哪个文件调用listener的时候,这个文件已经上传过了,剩下的工作就是程序员处理文件了。
再多讲点儿,jsf的上传组件在上传的过程中都是在Filter中就完成了上传任务,因为JSF的生命周中不能处理带有这种流形式的请求,上传完后,将文件的引用设置到请求中,交给jsf的生命周期进行处理(也就是listener处理了)
若要得到一个文件的上传信息,通过item.isTempFile()来判断这个文件是以临时文件方式存在还是以byte[]方式存在(意思是说在内存里面),如果它返回true,则是临时文件,会在服务器的临时目录下(eg. tomcat_home\temp)生成.upload的临时文件(如果是另外生成文件的话这里的临时文件一定要记得删除掉,如果是只是重命名(移动文件),则不需要)这时候要保存文件就要通过item.getFile获得文件并处理;如果它返回的false,则上传的文件在内存里面,要通过item.getData()获得byte数组来处理,如果上传的文件比较大的话,这种方式不推荐使用。
如果是临时文件你调用getData方法得到的是null值,如果还要获取数组大小则会报空指针异常;如果是以内存的方式存在,用getFile得到的也是null值。
如果不在RichFace过滤器(web.xml中)配置以什么方式存储上传文件时,默认方式为临时文件方式。
如果要改为内存方式存储(小文件推荐,大小界线自己衡量),在过滤器中加入
<init-param>
<param-name>createTempFiles</param-name>
<param-value>false</param-value>
</init-param>
分享到:
相关推荐
primefaces中用<p:fileUpload组件来上传文件
ondatabinding="FileUpload1_DataBinding"></asp:FileUpload> <asp:Button ID="Button1" runat="server" Text="分离样式" onclick="Button1_Click" /> <asp:LinkButton runat="server" ID="download" Text="下载...
JSF+rich 实现 fileUpload java代码实现上传文件和图片,代码已经测试过,架包完整,下载后可以直接运行
FileUpload控件的基本用法 .
NULL 博文链接:https://windywindy.iteye.com/blog/413582
<param-value>client</param-value> </context-param> <!-- Context Listener creates and sets the application handler --> <!-- Faces Servlet --> <servlet> <servlet-name>Faces Servlet</...
5.2.3、第三种Scriptlet:<%=%> 5.3、Scriptlet标签 5.4、page指令 5.4.1、设置页面的MIME 5.4.2、设置文件编码 5.4.3、错误页的设置 5.4.4、数据库连接操作 5.5、包含指令 5.5.1、静态包含 5.5.2、动态...
5.2.3、第三种Scriptlet:<%=%> 5.3、Scriptlet标签 5.4、page指令 5.4.1、设置页面的MIME 5.4.2、设置文件编码 5.4.3、错误页的设置 5.4.4、数据库连接操作 5.5、包含指令 5.5.1、静态包含 5.5.2、动态...
5.2.3、第三种Scriptlet:<%=%> 5.3、Scriptlet标签 5.4、page指令 5.4.1、设置页面的MIME 5.4.2、设置文件编码 5.4.3、错误页的设置 5.4.4、数据库连接操作 5.5、包含指令 5.5.1、静态包含 5.5.2、动态...
5.2.3、第三种Scriptlet:<%=%> 5.3、Scriptlet标签 5.4、page指令 5.4.1、设置页面的MIME 5.4.2、设置文件编码 5.4.3、错误页的设置 5.4.4、数据库连接操作 5.5、包含指令 5.5.1、静态包含 5.5.2、动态...
5.2.3、第三种Scriptlet:<%=%> 5.3、Scriptlet标签 5.4、page指令 5.4.1、设置页面的MIME 5.4.2、设置文件编码 5.4.3、错误页的设置 5.4.4、数据库连接操作 5.5、包含指令 5.5.1、静态包含 5.5.2、动态...
5.2.3、第三种Scriptlet:<%=%> 5.3、Scriptlet标签 5.4、page指令 5.4.1、设置页面的MIME 5.4.2、设置文件编码 5.4.3、错误页的设置 5.4.4、数据库连接操作 5.5、包含指令 5.5.1、静态包含 5.5.2、动态...
5.2.3、第三种Scriptlet:<%=%> 5.3、Scriptlet标签 5.4、page指令 5.4.1、设置页面的MIME 5.4.2、设置文件编码 5.4.3、错误页的设置 5.4.4、数据库连接操作 5.5、包含指令 5.5.1、静态包含 5.5.2、动态...
5.2.3、第三种Scriptlet:<%=%> 5.3、Scriptlet标签 5.4、page指令 5.4.1、设置页面的MIME 5.4.2、设置文件编码 5.4.3、错误页的设置 5.4.4、数据库连接操作 5.5、包含指令 5.5.1、静态包含 5.5.2、动态...
基于extjs的.NET3.5控件Coolite 1.0.0.34580 (Preview预览版), *************************************************** * Version 1.0.0 升级日志 *... configured in the <Items> property of <ext:CompositeField>.
多个用|分隔,如gif|jpg|png <br>Size 上传文件大小 (KB) 默认256KB <br>TimeOut 上传超时设置 (秒), 默认30秒 <br>CallBack Js回调函数名<br><br>例:<hn:FileUpload ID="ajaxUpload" IsMuch="true" runat="server...
ID="FileUpload1" runat="server" />请上传案例的封面图片</div> </td> </tr> <div id="preview_wrapper" > <div id="preview_fake"> <img id="preview" /> </div> </div> <img id="preview_size_fake" /> ...
<title>FileUpload上传文件示例-Mzwu.com</title> </head> <body> <form id="form1" runat="server"> <div> <asp:FileUpload ID="FileUpload1" runat="server" /> <asp:Button ID="Button1" runat="server" _...
比如招聘网站可能需要用户上传Word或PDF格式的简历。 使用二进制数据面临一项挑战:在应用程序中如何存储二进制数据。我们必须更新添加记录的界面以支持用户上传本地电脑中的文件,并添加额外的功能以下载某条记录...
<servlet-name>Connector</servlet-name> <servlet-class> com.FCKeditor.connector.ConnectorServlet </servlet-class> <init-param> <param-name>baseDir</param-name> <param-value>/upload/</param-value...