繁体   English   中英

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

[英]How to insert uploaded image from p:fileUpload as BLOB in MySQL?

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

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

而在XHTML页面,我写这个

<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 5.x中,上下文参数primefaces.UPLOADER在使用JSF 2.2时不存在或设置为autonative ,则getContents()将返回null因为它未在NativeUploadedFile实现中实现 使用UploadedFile#getInputStream()然后从中读取字节,例如在commons IO的帮助下

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

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

确保已将表单编码类型设置为multipart/form-data并且在使用Apache Commons FileUpload时,您已根据PrimeFaces用户指南在web.xml配置了文件上载过滤器

提到这一点可能会有所帮助,我不得不使用:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM