背景
我正在寻找一个使用ajax + Struts2异步上传大文件的工具,我能够使用servlet做同样的事情,但是当我修改逻辑来调用struts动作时。我注意到当我尝试使用struts2动作上传一个巨大的文件时,它并没有从jquery ajaxForm(options);
调用
我使用了以下链接中指定的示例代码,这非常适用。 http://www.simplecodestuffs.com/file-upload-with-progress-bar-using-jquery-in-servlet/
任何人都可以告诉以下jquery函数调用是否正确上传功能。 $("#uploadtest").ajaxForm(options);
我尝试了但是当上传大量数据时,它在一个特定的浏览器中没有按预期工作。 (也就是说,发生客户端ajax调用,但是后端没有调用相应的struts2操作,在服务器端没有生成日志)。我无法理解为什么在jquery ajaxform
上传大文件(多部分上传功能)时没有调用struts2动作。
jquery的
$("#uploadtest").ajaxForm(options);
jsp代码段
<s:form id="uploadtest" name="uploadform" action="aStrutsAction" method="post" enctype="multipart/form-data">
此处提出类似问题.. FormData in IE8/9
答案 0 :(得分:1)
将大文件上传到Struts2操作的问题是该请求可能不符合Struts2默认使用的限制。在配置设置中,该值设置为2097152.您还可以设置每个操作的限制。有关它的更多信息,请参阅Struts2 File Upload - Advanced Configuration:
Struts 2
default.properties
文件定义了一些影响文件上传行为的设置。您可能需要更改这些值。名称和默认值为:struts.multipart.parser=jakarta struts.multipart.saveDir= struts.multipart.maxSize=2097152
此文档页面的下一部分是File Size Limits,您已经注意到下划线框架(struts2,commons-fileupload)使用的文件大小的限制:
有两个单独的文件大小限制。首先是
struts.multipart.maxSize
来自Struts 2default.properties
个文件。出于安全原因,此设置存在 禁止恶意用户将极大文件上传到文件 你的服务器磁盘空间。此设置默认为大约2 兆字节,应调整到最大文件大小( 2 gigs max ) 您将需要框架来接收。如果您要上传struts.multipart.maxSize
适用的表单上有多个文件 总计,而不是单个文件大小。另一个设置,maximumSize
,是一个拦截器设置,用于确保a 特定Action不会收到太大的文件。注意 以下示例中两个设置的位置:<?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)
以及以下警告。如果框架本身没有超出框架的限制,您可以使用框架调整文件大小限制。