Comment insérer une image téléchargée depuis p: fileUpload comme BLOB dans MySQL?

Comment insérer l'image téléchargée de p:fileUpload comme BLOB dans MySQL?

@Lob
@Column(name = "photo")
private byte[] photo;

et dans la page XHTML, j'écris ce :

<p:inputText value="#{condidat.condidat.photo}" >
<p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}"   
    allowTypes="*.jpg;*.png;*.gif;" description="Images"/>                       
</p:inputText>

Comment puis-je récupérer la valeur de fichier téléchargé comme byte[] ?

5
demandé sur Abdennour TOUMI 2011-11-29 07:55:02

2 réponses

vous pouvez obtenir le contenu du fichier téléchargé via FileUploadEvent . En PrimeFaces 4.x avec Apache Commons FileUpload, ou en PrimeFaces 5.x avec le contexte param primefaces.UPLOADER défini à commons , vous pouvez utiliser UploadedFile#getContents() pour obtenir le fichier téléchargé comme byte[] .

public void handleFileUpload(FileUploadEvent event) {
    byte[] content = event.getFile().getContents();
    // ...
}

Dans PrimeFaces 5.x avec le contexte param primefaces.UPLOADER absent ou défini à auto ou native en utilisant JSF 2.2, puis getContents() retournera null comme c'est non implémenté NativeUploadedFile mise en œuvre . Utilisez UploadedFile#getInputStream() à la place et ensuite en lire les octets, par exemple avec L'aide de commons IO .

public void handleFileUpload(FileUploadEvent event) {
    byte[] content = IOUtils.toByteArray(event.getFile().getInputstream());
    // ...
}

enfin, mettez simplement ce byte[] dans votre entité et persistez/fusionnez-le.

assurez-vous que vous avez défini le type d'encodage de la forme à multipart/form-data et, en utilisant le fichier Apache Commons, que vous avez configuré le filtre de téléchargement de fichier dans web.xml selon le guide D'utilisation PrimeFaces.

8
répondu BalusC 2017-05-23 11:53:18

il pourrait être utile de mentionner que, j'ai dû utiliser:

public void handleUpload(FileUploadEvent e) throws Exception {
    byte[] contents = IOUtils.toByteArray(e.getFile().getInputstream());
    //....
}

comme il semble que dans les PrimeFaces 5.x, le getContents() renvoie toujours null !

0
répondu Ahmad Abdelghany 2015-03-02 19:38:02