Validation 如何禁止同一个文件与jsf一起使用primefaces fileupload

Validation 如何禁止同一个文件与jsf一起使用primefaces fileupload,validation,jsf,file-upload,primefaces,Validation,Jsf,File Upload,Primefaces,我将PrimeFaces与JSFin web一起使用,我不希望用户上传相同的文件。这就好像不能将相同的文件保存在一个路径中一样。有什么方法可以实现吗?您无法知道用户的本地文件路径:。用户还可以重命名或移动文件,并绕过文件路径检查。正如Kukeltje所评论的,最好在服务器端比较文件内容 如果您确实希望基于文件名验证客户端,那么您可以覆盖小部件的validate方法。但是它没有文档记录,所以它可以在未来的PrimeFaces版本中消失 <h:form> <p:fileUp

我将PrimeFaces与JSFin web一起使用,我不希望用户上传相同的文件。这就好像不能将相同的文件保存在一个路径中一样。有什么方法可以实现吗?

您无法知道用户的本地文件路径:。用户还可以重命名或移动文件,并绕过文件路径检查。正如Kukeltje所评论的,最好在服务器端比较文件内容

如果您确实希望基于文件名验证客户端,那么您可以覆盖小部件的
validate
方法。但是它没有文档记录,所以它可以在未来的PrimeFaces版本中消失

<h:form>
    <p:fileUpload mode="advanced" widgetVar="fileup" />
    <script>
        $(function() {
            PF('fileup').validate = function(file) {
                if (file.name === 'alreadyuploaded.png')
                    return 'Not this one though'; // return a error message string
                else
                    return null; // allow
            }
        });
    </script>
</h:form>

$(函数(){
PF('fileup')。验证=函数(文件){
如果(file.name=='alreadyuploaded.png')
返回“虽然不是这个”;//返回错误消息字符串
其他的
返回null;//允许
}
});

不过,我没有在较旧的非HTML5浏览器中对此进行测试-p:fileUpload in advanced mode在这些浏览器中的工作方式不同。

当然,上传到临时文件夹后,请在代码中检查它。。。我不想知道本地文件路径,我只想禁止名称和文件类型(后缀)不能再添加@西门吹雪, 修改了答案。我已经阅读了您的代码,我理解它,但是如何获得“alreadyuploaded.png”的真实文件名(可能有很多文件),您能更清楚地解释一下吗。@Vsevolod Golovanov@西门吹雪, 上载文件时,服务器上会出现
FileUploadEvent
。使用
event.getFile().getFileName()
获取名称,将它们存储在适当范围内的某个集合中,然后
更新脚本。脚本应该通过EL:
if(file.name==={myBean.forbiddenFilenamesJSList})引用集合(转换为JS)
…但是是否有任何方法用户不能添加相同的文件和后缀。@vsevold Golovanov。