从Struts2文件上传实用程序发布ajaxForm无法在IE

时间:2016-06-29 08:11:29

标签: javascript jquery struts2 progress-bar ajaxform

背景 我正在寻找一个使用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

1 个答案:

答案 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 2   default.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)

以及以下警告。如果框架本身没有超出框架的限制,您可以使用框架调整文件大小限制。