如何在p:fileUpload中将上传的图像作为BLOB插入MySQL中?

Abd*_*UMI 5 jsf jpa file-upload primefaces

如何在p:fileUpload中将上传的图像作为BLOB插入MySQL中?

@Lob
@Column(name = "photo")
private byte[] photo;
Run Code Online (Sandbox Code Playgroud)

而在XHTML页面,我写这个:

<p:inputText value="#{condidat.condidat.photo}" >
<p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}"   
    allowTypes="*.jpg;*.png;*.gif;" description="Images"/>                       
</p:inputText>
Run Code Online (Sandbox Code Playgroud)

如何将上传文件的值检索为byte[]

Bal*_*usC 8

您可以通过获取上传的文件内容FileUploadEvent.在使用Apache Commons FileUpload的PrimeFaces 4.x中,或者在primefaces.UPLOADER设置了上下文参数的PrimeFaces 5.x 中commons,您可以使用UploadedFile#getContents()获取上传的文件byte[].

public void handleFileUpload(FileUploadEvent event) {
    byte[] content = event.getFile().getContents();
    // ...
}
Run Code Online (Sandbox Code Playgroud)

在PrimeFaces 5.x中,上下文参数primefaces.UPLOADER不存在或设置为autonative使用JSF 2.2时,getContents()将返回,null因为它未在NativeUploadedFile实现中实现.UploadedFile#getInputStream()改为使用然后从中读取字节,例如在公共IO的帮助下.

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

最后,只需byte[]在您的实体中设置它并保持/合并它.

请确保您有如下形式的编码类型设置为multipart/form-data,并且,使用Apache通用FileUpload时,你已经配置了文件上传过滤器web.xml按PrimeFaces用户指南.