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

标签 java validation jsf jsf-2

我正在开发一个 JSF Web 项目,该项目使用 h:inputFile 工具来上传文件。我将 h:inputFile 的值绑定(bind)到输入javax.servelt.http.Part

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

我的问题: 使用 Part 接口(interface)是否会导致整个文件上传到服务器端,然后在提交表单时对其进行验证(即其大小)?

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

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

提前致谢!

最佳答案

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

参见:ICEFaces inputFile getting the file content without upload

关于java - 在 JSF 中使用 h :inputFile and javax. servlet.http.Part 上传之前验证文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26797673/

相关文章:

validation - 如何在 Angular 6 中上传之前验证文件

javascript - 如何格式化图像以进行网络文件传输

jsf - 如何通过 primefaces 中的 beans 在 selectOneRadio/selectCheckboxMenu 中设置默认选中项

java - 未考虑配置的默认语言环境?

java - 如何使用 iText 解析未标记的 pdf 文件

javascript - 有没有办法 "compile"或检测 Javascript( Node )中的拼写错误?

尝试在 OS X 上运行 Cassandra 时出现 Java 错误 : Bad version number in . 类文件错误

spring - 如何使用inputStream获取文件名和文件类型?

java - 了解 Java 8/9 函数式编程(lambda 表达式)中的 Map 和 Reduce。 map() 和 reduce() 如何提高性能?

java - 使用 BCrypt 加载测试数据