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

时间:2011-11-29 03:55:02

标签: jsf jpa file-upload primefaces

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

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

在XHTML页面中,我写了this

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

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

2 个答案:

答案 0 :(得分:8)

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

byte[]

在使用JSF 2.2时,上下文参数public void handleFileUpload(FileUploadEvent event) { byte[] content = event.getFile().getContents(); // ... } 缺席或设置为primefaces.UPLOADERauto的PrimeFaces 5.x中,native将返回getContents() as那是not implemented in NativeUploadedFile implementation。请改为使用null,然后使用read bytes from it, e.g. with help of commons IO

UploadedFile#getInputStream()

最后,只需在您的实体中设置此public void handleFileUpload(FileUploadEvent event) { byte[] content = IOUtils.toByteArray(event.getFile().getInputstream()); // ... } 并保留/合并即可。

确保您已将表单编码类型设置为byte[],并且在使用Apache Commons FileUpload时,您已根据PrimeFaces用户指南在multipart/form-data中配置了file upload filter

答案 1 :(得分:0)

提一下我可能会有所帮助:

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

看起来在PrimeFaces 5.x中,getContents()总是返回null!