Skip to main content
 首页 » 编程设计

jsf之如何从 p :fileUpload as BLOB in MySQL 插入上传的图像

2025年02月15日15exmyth

如何在 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 中不存在或设置为 autonative在使用 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 filterweb.xml根据 PrimeFaces 用户指南。