在上传文件之前,在JSF中使用h:inputFile和javax.servlet.http.Part验证文件

在上传文件之前,在JSF中使用h:inputFile和javax.servlet.http.Part验证文件,java,validation,jsf,jsf-2,Java,Validation,Jsf,Jsf 2,我正在从事一个JSF web项目,该项目使用h:inputFile工具上载文件。我将h:inputFile的值绑定到类型为javax.servelt.http.Part的backing bean属性 <h:inputFile id="inputfile" validator="#{bean.validateFile}" value="#{bean.part}"/> 我还在同一个支持bean中使用以下文件验证策略: public void validateFile(FacesC

我正在从事一个JSF web项目,该项目使用h:inputFile工具上载文件。我将h:inputFile的值绑定到类型为javax.servelt.http.Part的backing bean属性

<h:inputFile id="inputfile" validator="#{bean.validateFile}" value="#{bean.part}"/>

我还在同一个支持bean中使用以下文件验证策略:

 public void validateFile(FacesContext con, UIComponent comp, Object value) {
    Part p = (Part) value;
    List<FacesMessage> list = new ArrayList<>();
    if (p.getSize() == 0) {
        list.add(new FacesMessage("File Size too small"));
    }
    if (p.getSize()>MAXSIZE) {
        list.add(new FacesMessage("File Size too Big"));
    }
    if (!list.isEmpty()) {
        throw new ValidatorException(list);
    }
}
public void validateFile(FacesContext con、ui组件comp、对象值){
第p部分=(部分)值;
列表=新的ArrayList();
如果(p.getSize()==0){
添加(新的FacesMessage(“文件大小太小”);
}
如果(p.getSize()>MAXSIZE){
添加(新的FacesMessage(“文件大小太大”);
}
如果(!list.isEmpty()){
抛出新的验证器异常(列表);
}
}
我的问题: 使用Part界面是否会导致整个文件上载到服务器端,然后在提交表单时进行验证(即其大小)

当我在本地主机(Glass fish v.4)上体验到这一点时,我在Chrome浏览器的左角看到一条消息,指示文件上载进度,之后如果文件验证出错,我会收到验证消息。我担心在真实情况下(如缓慢的互联网连接),上传文件后发送大小验证错误是一种非常不方便的方式

请帮助我,如果是我假设的情况,请发送替代解决方案


提前谢谢

这是正常的行为。服务器需要访问文件以验证它(内容、大小…),并且只能通过用户交互(例如表单提交)授予访问权限


请参阅:

在提交实际上载之前,是否有任何可能的方法至少获取客户端的文件大小(即使用客户端技术)?