如何在 MySQL 中将 p:fileUpload 上传的图像插入为 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[]
?
请您参考如下方法:
您可以通过FileUploadEvent
获取上传的文件内容.在 PrimeFaces 4.x 中使用 Apache Commons FileUpload,或者在 PrimeFaces 5.x 中使用上下文参数 primefaces.UPLOADER
设置为 commons
,您可以使用 UploadedFile#getContents()
获取上传的文件为 byte[]
.
public void handleFileUpload(FileUploadEvent event) {
byte[] content = event.getFile().getContents();
// ...
}
在带有上下文参数
primefaces.UPLOADER
的 PrimeFaces 5.x 中不存在或设置为
auto
或
native
在使用 JSF 2.2 时,然后
getContents()
将返回
null
因为那是
not implemented in NativeUploadedFile
implementation .使用
UploadedFile#getInputStream()
相反,然后
read bytes from it, e.g. with help of commons IO .
public void handleFileUpload(FileUploadEvent event) {
byte[] content = IOUtils.toByteArray(event.getFile().getInputstream());
// ...
}
最后,只需设置这个
byte[]
在您的实体中并保留/合并它。
确保您已将表单编码类型设置为
multipart/form-data
并且,当使用 Apache Commons FileUpload 时,您已经配置了
file upload filter在
web.xml
根据 PrimeFaces 用户指南。