2016-02-15 1 views
1

Wildfly 8, Omnifaces 2.2, Primefaces 5,2, JSF 2.2.11 (Mojarra)Имя файла кодировка в JSF 2.2 Выгрузки против Apache Commons Загрузить

Я использую OminifacesCharacterEncodingFilter, чтобы гарантировать, что имена файлов правильно кодируются на сервере , Как ни странно, если Primefaces использует внутреннюю загрузку Jsf, имя файла не кодируется. И если Primefaces использует более старый подход с Appache Commons, все в порядке.

Пример: 'Hällo.jpg' становится '' Hällo.jpg

web.xml конфигурации: Apache решение (правильный):

<filter> 
     <filter-name>PrimeFaces FileUpload Filter</filter-name> 
     <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>PrimeFaces FileUpload Filter</filter-name> 
     <servlet-name>Faces Servlet</servlet-name> 
    </filter-mapping> 
    <context-param> 
     <param-name>primefaces.UPLOADER</param-name> 
     <param-value>commons</param-value> 
    </context-param> 

<filter> 
    <filter-name>characterEncodingFilter</filter-name> 
    <filter-class>org.omnifaces.filter.CharacterEncodingFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>characterEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Jsf Загрузить (символы не кодируются) , Другие параметры удаляются.

<filter> 
    <filter-name>characterEncodingFilter</filter-name> 
    <filter-class>org.omnifaces.filter.CharacterEncodingFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>characterEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

EDIT: из-за ответ это ошибка сервера. Я пытался настроить сервер:

<jboss-web> 
<default-encoding>UTF-8</default-encoding> 
</jboss-web> 

и

<servlet-container name="default" default-encoding="UTF-8"> 

но это не помогает.

+0

Это технически ошибка на сервере. Какой именно WF8? Пробовал текущий WF10? – BalusC

+0

Спасибо за ваш комментарий. мы используем WF8.2.0Final. Мы еще не пробовали WF10. – Tony

+0

WF использует 'Undertow 1.1.0.Final' – Tony

ответ

1

Я воспроизвел его, WildFly совсем не рассматривает запрос на кодирование тела запроса для multipart/form-data запросов. Вам действительно нужно сконфигурировать его на сервере (например, как вы делали бы для запросов GET).

Открыть /standalone/configuration/standalone.xml, подглядывать следующую строку

<servlet-container name="default"> 

изменение его

<servlet-container name="default" default-encoding="UTF-8"> 

и рестарта. Это по крайней мере сработало для меня на WildFly 10.0.0. Я создал проблему WFLY-6226, чтобы сначала рассмотреть форму запроса на запрос, поэтому нет необходимости редактировать standalone.xml.

В WildFly 8.x (я тестировал 8.2.1) это, к сожалению, все равно не будет работать, поскольку оно вообще не учитывает вышеуказанные настройки. Лучше всего использовать Apache Commons FileUpload, пока вы не сможете обновить WildFly.

Если вы действительно хотите сохранить собственную загрузку, вы можете рассмотреть возможность явного декодирования сломанного имени файла в байтах с использованием ISO-8859-1, а затем перекодировать его с помощью UTF-8.

String fileName = new String(uploadedFile.getFileName().getBytes("ISO-8859-1"), "UTF-8"); 

Это, однако, ломкими и не переносимы, как это нарушило бы при развертывании на сервере, где эта проблема кодирования не проявляется. Поэтому вам действительно нужно помнить о том, чтобы вернуться к обходному пути при обновлении/миграции.

+0

Спасибо за ответ! К сожалению, ваше решение не помогает. Я изменил строку и опустошил WF tmp/и данные/каталоги. – Tony

+0

ОК, чтобы исключить одно и другое, где именно вы проверили новое значение? Я получил «Hällo.jpg» «как ожидалось», а не «H ?? llo.jpg».Вопросительные знаки обычно появляются только тогда, когда, например, 'System.out.println()' кодировка неверна или когда кодировка драйвера JDBC неверна. – BalusC

+0

Да, вы правы. У меня тоже есть «Hällo.jpg». Я исправлю вопрос. Это было мое (неправильное) упрощение. – Tony

Смежные вопросы