【问题标题】:Post ajaxForm from Struts 2 file upload utility not working in IE从 Struts 2 文件上传实用程序发布 ajaxForm 在 IE 中不起作用
【发布时间】:2016-10-31 19:47:01
【问题描述】:

背景: 我正在寻找一种使用 Ajax + Struts 2 异步上传大文件的工具,我可以使用 servlet 做同样的事情,但是当我修改逻辑以调用 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动作,服务器端没有生成日志)。

我无法理解为什么当 jQuery ajaxform 上传大文件(分段上传功能)时没有调用 Struts 2 操作。

jQuery:

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

JSP sn-p:

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

here 提出了类似的问题。

【问题讨论】:

  • 怎么不工作了?它在其他浏览器中是否有效?
  • I tried but it is not working as expected 你应该澄清这一点。
  • @RomanC 谢谢。更新了问题。
  • @yeppe 如果 struts2 操作正常,那么这是与 jQuery 一起使用的 javascript 代码的浏览器兼容性问题。

标签: jquery ajax file-upload struts2 ajaxform


【解决方案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,是一个拦截器设置,用于确保 特定的 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)

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

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 2011-09-14
    • 1970-01-01
    • 2015-12-04
    • 2012-02-16
    • 1970-01-01
    • 2013-04-20
    • 2011-12-14
    • 2017-03-08
    相关资源
    最近更新 更多