Опубликовать ajaxForm из утилиты загрузки файлов Struts 2, не работающей в IE

Предпосылки: Я ищу инструмент для асинхронной загрузки большого файла с помощью Ajax + Struts 2, я смог сделать то же самое с помощью сервлета, но когда я изменил логику для вызова действия Struts. Я заметил, что когда я пытаюсь загрузить огромный файл с помощью действия Struts 2, он не вызывается из jQuery ajaxForm(options);

Я использовал образец кода, указанный в приведенной ниже ссылке, он отлично работает. http://www.simplecodestuffs.com/file-upload-with-progress-bar-using-jquery-in-servlet/

Может ли кто-нибудь сказать, подходит ли ниже вызов функции jQuery для функции загрузки.

$("#uploadtest").ajaxForm(options);  

Я пробовал, но он не работает должным образом в одном конкретном браузере, когда загружаются огромные данные. (То есть происходит клиентский вызов ajax, однако соответствующее действие Struts 2 не вызывается в бэкэнде, журналы не создаются на стороне сервера).

Я не могу понять, почему действие Struts 2 не вызывается, когда jQuery ajaxform для загрузки огромного файла (функция многокомпонентной загрузки).

jQuery:

$("#uploadtest").ajaxForm(options);

Фрагмент JSP:

<s:form id="uploadtest" name="uploadform" action="aStrutsAction" method="post" enctype="multipart/form-data">

Аналогичный вопрос задается здесь.


person yeppe    schedule 29.06.2016    source источник
comment
Как это не работает? Это работает в других браузерах?   -  person Aleksandr M    schedule 29.06.2016
comment
I tried but it is not working as expected вам следует это прояснить.   -  person Roman C    schedule 30.06.2016
comment
@RomanC, спасибо. обновил вопрос.   -  person yeppe    schedule 30.06.2016
comment
@yeppe, если действие struts2 работает, то это проблема совместимости браузера для кода javascript, используемого с jQuery.   -  person Roman C    schedule 30.06.2016


Ответы (1)


Проблема с загрузкой больших файлов в действие Struts2 заключается в том, что запрос может не соответствовать ограничениям, используемым по умолчанию в Struts2. В настройках конфигурации установлено значение 2097152. Вы также можете установить ограничения для каждого действия. Подробнее об этом вы можете узнать в Загрузка файла Struts2 - Расширенная конфигурация < / а>:

Файл Struts 2 default.properties определяет несколько параметров, которые влияют на поведение загрузки файлов. Возможно, вам понадобится изменить эти значения. Имена и значения по умолчанию:

struts.multipart.parser=jakarta
struts.multipart.saveDir=
struts.multipart.maxSize=2097152

Следующий раздел на этой странице документации - Ограничения размера файла где вы заметили об ограничениях размера файла, используемых фреймворками подчеркивания (struts2, commons-fileupload):

Есть два отдельных ограничения на размер файла. Первый - это struts.multipart.maxSize, который взят из файла Struts 2 default.properties. Этот параметр существует из соображений безопасности, чтобы запретить злоумышленнику загружать очень большие файлы для заполнения дискового пространства ваших серверов. По умолчанию этот параметр составляет примерно 2 мегабайта, и его следует настроить на максимальный размер файла (2 гигабайта), который вам понадобится для получения фреймворка. Если вы загружаете в форму более одного файла, struts.multipart.maxSize применяется к общей сумме, а не к размерам отдельных файлов. Другой параметр, maximumSize, является параметром перехватчика, который используется, чтобы гарантировать, что конкретное действие не получит слишком большой файл. Обратите внимание на расположение обеих настроек в следующем примере:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.multipart.maxSize" value="1000000" />
     
    <action name="doUpload" class="com.example.UploadAction">
        <interceptor-ref name="basicStack"/>
        <interceptor-ref name="fileUpload">
            <param name="maximumSize">500000</param>
        </interceptor-ref> 
        <interceptor-ref name="validation"/>
        <interceptor-ref name="workflow"/>
 
        <result name="success">good_result.jsp</result>
    </action>
</struts>

Если размер файла превышает указанные выше параметры конфигурации, псевдо-индикатор выполнения останавливается, как только он возвращает ответ. Это может быть 1% или 100% в зависимости от скорости порога и размера файла. Но на стороне сервера вы можете увидеть исключение

org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (xxx) exceeds the configured maximum (yyy)

и следующие предупреждения. Вы можете настроить ограничения размера файла с помощью фреймворка, если он не превышает ограничений самого фреймворка.

person Roman C    schedule 30.06.2016