如何将上传的图像从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[]
?
答案 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.UPLOADER
或auto
的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!