我正在尝试在JSP / Struts2中实现文件上传,我注意到一个奇怪的行为。 我在struts.xml中以这种方式声明了我的操作,将文件大小限制为1MB
<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>
效果很好,非图像文件和超过1MB的图像会出错。 唯一的问题是,在删除之前,无论如何,太大的文件都已完全上传到服务器临时文件夹中。
有没有办法在限制被触发后立即停止上传?
修改 Quaternion的解决方案有效,当请求超过最大集合时,下一行会抛出错误,一切都会停止。没有文件写入磁盘
<constant name="struts.multipart.maxSize" value="1000000" />
答案 0 :(得分:5)
有两个文件大小参数,一个与单个文件大小,另一个与最大多部分文件大小。这是因为你可以接收一个文件数组(只需将setter类型从File更改为File [],这很简单),比如说 struts.multipart.maxSize 设置为10MB并且文件大小( maximumSize )设置为1 MB,您应该能够接收10个1MB文件。因此缓冲区应该允许增长到10 MB。
<?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