I am using PrimeFaces with JSFin web,and I don't want user upload the same file.That's like you can't save the same file in a path. Is there any way to achieve it?
            Asked
            
        
        
            Active
            
        
            Viewed 461 times
        
    1
            
            
        - 
                    2Sure, check it in **your** code after uploading to a temp folder... But better to rely on the content for duplication – Kukeltje Jan 19 '18 at 11:38
- 
                    It's not allow. – xmcx Jan 21 '18 at 13:31
1 Answers
1
            You can't know user's local file path: see this. Also a user could rename or move files, and circumvent the file path check. As Kukeltje commented, better compare file content server-side.
If you really want to validate client-side based on file names, then you could override the widget's validate method. It's undocumented though, so it can go away in future PrimeFaces versions.
<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>
I didn't test this in older non-HTML5 browsers though - p:fileUpload in advanced mode works differently in those.
 
    
    
        Vsevolod Golovanov
        
- 4,068
- 3
- 31
- 65
- 
                    I don't want to know the local file path,i just want want to forbid the name and file type(the suffix) can not add again. – xmcx Jan 23 '18 at 07:18
- 
                    
- 
                    I have readed your code,and i understand it,but how can i get the "alreadyuploaded.png" real file names(maybe many files),could you explain it more clearly.@Vsevolod Golovanov – xmcx Jan 26 '18 at 14:44
- 
                    @西门吹雪, when a file is uploaded you get a `FileUploadEvent` on the server. Get names with `event.getFile().getFileName()`, store them in some collection in appropriate scope, and `update` the script. The script should refer to the collection (converted to JS) via EL: `if (file.name === #{myBean.forbiddenFilenamesJSList})`... – Vsevolod Golovanov Jan 26 '18 at 16:18
- 
                    But is there any way that users can not add the same file and with suffix.@Vsevolod Golovanov. – xmcx Jan 29 '18 at 03:02
