Как вставить загруженное изображение из p: fileUpload как BLOB в MySQL? - PullRequest
5 голосов
/ 29 ноября 2011

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

8 голосов
/ 29 ноября 2011

Вы можете получить загруженный файл через 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 руководство пользователя.

0 голосов
/ 02 марта 2015

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

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

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

...