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 !