2017-06-30 162 views
0

开始上传的照片我使用JSF 2.2 PrimeFaces 6.0和我已经实现了一个解决方案,上传使用PrimeFaces.The问题p:fileUpload组件是任何用户都可以上传,即使对于需求不经过证实的库文件图片一个commandButton导致磁盘空间的浪费。 我需要为了帮助启动不通过PrimeFaces的p:fileupload组件的上传按钮上传通过commandButton文件。与命令按钮

这里的应用程序的预览:upload files

这里的XHTML代码:

<p:fileUpload 
          fileUploadListener="#{imageUploader.handleFileUpload}" 
          label="Ajouter" uploadLabel="Télécharger" cancelLabel="Annuler" 
          mode="advanced" auto="false" sizeLimit="10485760" multiple="true" 
          fileLimit="10" fileLimitMessage="Maximum 10 images" 
          dragDropSupport="true" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" 
          invalidFileMessage="Format de fichier non valide" invalidSizeMessage="Taille maximum 10 MB"/> 

这里的Java Bean代码:

package utils; 

import java.io.FileOutputStream; 
import java.util.UUID; 

import javax.faces.application.FacesMessage; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ManagedProperty; 
import javax.faces.bean.ViewScoped; 
import javax.faces.context.FacesContext; 

import org.primefaces.event.FileUploadEvent; 
import org.primefaces.model.UploadedFile; 

import mBeans.DemandeBean; 

@ManagedBean 
@ViewScoped 
public class ImageUploader { 
    private UploadedFile uploadedFile; 
    @ManagedProperty(value = "#{demandeBean}") 
    private DemandeBean demandeBean; 


    public void handleFileUpload(FileUploadEvent event) { 
     uploadedFile = event.getFile(); 
     String shortImagePath = UUID.randomUUID().toString() + ".jpg"; 

     if (uploadedFile != null && uploadedFile.getContents() != null) { 
      try { 

       byte[] contents = uploadedFile.getContents(); 
       FileOutputStream fos = new FileOutputStream(DirectoryInitilizer.IMAGE_DIR + "/" + shortImagePath); 
       fos.write(contents); 
       fos.close(); 

       demandeBean.getImages().add(shortImagePath); 
       FacesMessage message = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded."); 
       FacesContext.getCurrentInstance().addMessage(null, message); 

      } catch (Exception e) { 
       FacesMessage message = new FacesMessage("pb", event.getFile().getFileName() + " is not uploaded."); 
       FacesContext.getCurrentInstance().addMessage(null, message); 
      } 
     } 

    } 

    public UploadedFile getUploadedFile() { 
     return uploadedFile; 
    } 

    public void setUploadedFile(UploadedFile uploadedFile) { 
     this.uploadedFile = uploadedFile; 
    } 

    public DemandeBean getDemandeBean() { 
     return demandeBean; 
    } 

    public void setDemandeBean(DemandeBean demandeBean) { 
     this.demandeBean = demandeBean; 
    } 

} 

回答

0

我认为你可以这样做

.ui-fileupload-upload { 
    display: none; 
} 

按钮:

<p:commandButton ... 
       oncomplete="if(args &amp;&amp; !args.validationFailed) {PF('fileuploadwidgetvar').upload();}" 
/>