Как вставить загруженное изображение из 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()
всегда возвращает ноль!