Как вставить загруженное изображение из p:fileUpload как BLOB в 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[]?

2 ответа

Решение

Вы можете получить загруженный файл через 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 отсутствует или установлен на auto или же native при использовании JSF 2.2, то getContents() вернусь null как это не реализовано в NativeUploadedFile реализация. использование UploadedFile#getInputStream() вместо этого, а затем читать байты из него, например, с помощью общего ввода-вывода.

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

Наконец, просто установите это byte[] в вашей сущности и сохранить / объединить его.

Убедитесь, что вы установили тип кодировки формы multipart/form-data и, при использовании Apache Commons FileUpload, вы настроили фильтр загрузки файлов в web.xml согласно руководству пользователя PrimeFaces.

Было бы полезно упомянуть, что я должен был использовать:

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

Похоже, что в PrimeFaces 5.x getContents() всегда возвращает ноль!

Другие вопросы по тегам