Ограничить максимальный размер загрузки файла Struts2 без загрузки всего файла - PullRequest
4 голосов
/ 27 января 2011

Я пытаюсь осуществить загрузку файлов в JSP / Struts2, и я заметил странное поведение. Я объявил свое действие таким образом в struts.xml, чтобы ограничить размер файла до 1 МБ

<action name="massInsert" class="massInsertAction">
    <interceptor-ref name="fileUpload">
        <param name="allowedTypes">
             image/png,image/gif,image/jpeg
        </param>
        <param name="maximumSize">1000000</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack"/>

    <result name="success">/WEB-INF/jsp/massInsert/massInsert.jsp</result>
    <result name="validationError">/WEB-INF/jsp/massInsert/massInsert.jsp</result>
</action>

это работает довольно хорошо, не файлы изображений и изображения размером более 1 МБ выдают ошибку. Единственная проблема заключается в том, что слишком большой файл в любом случае был полностью загружен во временную папку сервера перед удалением.

Есть ли способ остановить загрузку, как только достигнут предел?

Edit: Решение Quaternion работает, когда запрос превышает максимальный, заданный следующей строкой, выдается ошибка, и все останавливается. Файл не записан на диск

<constant name="struts.multipart.maxSize" value="1000000" />

1 Ответ

5 голосов
/ 28 января 2011

Существует два параметра размера файла, один из которых относится к размеру отдельных файлов, а другой - к максимальному размеру файла. Это на месте, потому что вы можете получить массив файлов, если хотите (просто измените тип установщиков с File на File [], это так просто), скажем, struts.multipart.maxSize имеет значение 10 МБ и файл Размер ( MaximumSize ) установлен в 1 МБ, вы должны иметь возможность получить 10 файлов 1 МБ. Таким образом, буфер должен быть увеличен до 10 МБ.

<?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>

Источник: https://cwiki.apache.org/confluence/display/WW/File+Upload#FileUpload-FileSizeLimits

...