2011-11-29 64 views
4

如何從p:fileUpload插入上傳的圖像作爲BLOB在MySQL中?如何將p:fileUpload中的上傳圖像作爲BLOB插入到MySQL中?

@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> 

我怎樣才能retreive爲byte[]上傳文件的價值?

+0

發生錯誤: javax.validation.ConstraintViolationException:在對回調事件執行自動Bean驗證時違反了Bean驗證約束:'prePersist'。有關詳細信息,請參閱嵌入式ConstraintViolations。 –

+0

您必須使用從fileUpload組件接收到的StreamedContent。你在展示中有一個例子。你使用什麼版本的PF?一旦你擁有了流媒體內容,你可以將其插入到數據庫中。 – spauny

回答

8

您可以通過FileUploadEvent獲取上傳的文件內容。在帶有Apache Commons FileUpload的PrimeFaces 4.x中,或PrimeFaces 5.x中,上下文參數primefaces.UPLOADER設置爲commons,則可以使用UploadedFile#getContents()來獲取上傳的文件,如byte[]

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

在PrimeFaces 5.x中具有上下文PARAM primefaces.UPLOADER存在或設置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[]並保留/合併它。

確保您已使用Apache通用FileUpload當表單的編碼類型設置爲multipart/form-data和,你已經在web.xml配置file upload filter按照PrimeFaces用戶指南。

0

它可能會有所幫助提的是,我不得不使用:

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

,因爲它似乎在PrimeFaces 5.x中,該getContents()始終返回null!

相關問題