Загрузка файлов Primefaces на Wildfly

Я пытаюсь сохранить изображение профиля в базе данных.

Страница:

<p:graphicImage id="profileImage"
                        value="#{myProfile.usersProfileImage}" />    
<p:fileUpload fileUploadListener="#{myProfile.fileUploadListener}"
                            auto="true" mode="advanced" update="profileImage"
                            sizeLimit="100000" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />

Поддержка:

public StreamedContent getUsersProfileImage() {
            return new DefaultStreamedContent(new ByteArrayInputStream(
                    user.getProfileJpegImage()));
    }    
public void fileUploadListener(FileUploadEvent event) {
        try {
            setProfileImageFromInputStream(event.getFile().getInputstream());
        } catch (IOException e) {
            throw new IllegalStateException(e);
        }
    }

    private void setProfileImageFromInputStream(InputStream stream) {
        try {
            user.setProfileJpegImage(IOUtils.toByteArray(stream));
        } catch (IOException e) {
            throw new IllegalStateException(e);
        }
    }

После выбора картинки картинка не меняется и в консоли появляется следующая ошибка

14:36:02,387 ERROR [io.undertow.request] (default task-2) UT005005: Cannot remove uploaded file C:\Development\wildfly-8.0.0.Final\standalone\tmp\myApp.war\undertow3307538071115388117upload

Я также нашел эту проблему https://issues.jboss.org/browse/WFLY-2329.

и я также попытался расширить свой сервлет Faces с помощью составной конфигурации, например:

<servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <multipart-config>
            <max-file-size>20848820</max-file-size>
            <max-request-size>418018841</max-request-size>
            <file-size-threshold>1048576</file-size-threshold>
        </multipart-config>
    </servlet>

но ничего не изменилось.

Любые идеи? TY в продвинутом


person DCO    schedule 17.03.2014    source источник


Ответы (2)


Я получил ту же ошибку:

[io.undertow.request] (default task-62) UT005005: Cannot remove uploaded file...

Однако я мог бы решить эту проблему, закрыв поток после прочтения.

Вот мой кусок кода (он немного отличается):

    byte[] bytes;
    try {
        InputStream is = upFile.getInputstream();
        if (is != null) {
            bytes  = IOUtils.toByteArray(is);
            is.close();
        } else {
            bytes = new byte[0];
        }
    } catch (IOException e) {
        log.error(e.getMessage());
        bytes = new byte[0];
    }

После добавления строки:

    is.close();

ошибка udertow UT005005 исчезла.

person Mitja Gomboc    schedule 29.10.2014
comment
лучше закрыть поток в блоке finally или использовать попытку с ресурсами: try(InputStream is = upFile.getInputstream()) { bytes = IOUtils.toByteArray(is); } - person kwisatz; 13.05.2015

Я забыл установить MIME-тип в StreamedContent

person DCO    schedule 17.03.2014
comment
Добрый день, а можно подробнее о решении? Я столкнулся с той же проблемой с сообщением об ошибке. - person xwinus; 02.06.2014
comment
вернуть новый DefaultStreamedContent (новый ByteArrayInputStream (изображение), изображение/jpeg); - person DCO; 10.06.2014
comment
Я забыл добавить mimetype image/jpeg в свой StreamedContent - person DCO; 10.06.2014
comment
Даже с mimetype у меня была такая же проблема, решение Mitja решило эту проблему для меня. - person Al-Mothafar; 19.11.2014