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[] ?
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.
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 !