【问题标题】:Struts 2 FileUpload not workingStruts 2 FileUpload 不工作
【发布时间】:2012-07-20 18:50:43
【问题描述】:

我有一个 struts 2 应用程序,其中 2 个页面有 struts 文件上传。一个可以完美运行,而另一个则无法正常工作。我给了我“字段“secImage”的无效字段值。

这是 JSP 的代码

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%@taglib uri="http://displaytag.sf.net" prefix="display" %>

<html>
<head>
</head>
<body>
    <%@ include file="header.jsp" %>

    <s:form action="Test" method="POST" style="width:90%;">
           Another form here......
    </s:form>
    <s:form action="Test" method="POST" enctype="multipart/form-data">
        <s:push value="secVul">
            <s:hidden name="vulId" />
            <s:hidden name="scanHistory.scanId" />
            <s:textfield name="protocol" label="Protocol" style="width: 80%;" />
            <s:textarea name="description" label="Description" style="width: 80%;" />
            <s:textarea name="solution" label="solution" />
            <more form elements here>sdfasdfasdfasd

            <s:file name="secImage" label="Image to Upload" size="40"/>
            <s:submit value="Add/Update" align="center"/>
        </s:push>
    </s:form>
<%@ include file="footer.jsp" %>
</body>
</html>

这里是struts配置

<interceptor-ref name="fileUpload">
<param name="maximumSize">909715200</param>
<param name="allowedTypes">
text/xml,application/octet-stream,image/png,image/gif,image/jpeg,image/pjpeg
                </param>
            </interceptor-ref>
            <interceptor-ref name="defaultStack" />

    <action name="Test" method="saveOrUpdate" class="com.Test">
        <result name="success" type="redirect">listVulsMGR</result>
        <result name="input">/WEB-INF/pages/secVuls.jsp</result>
        <result name="error">/WEB-INF/pages/secVuls.jsp</result>
    </action>

动作类代码:

public class Test extends ActionSupport implements ModelDriven<Test>, Preparable,ServletRequestAware {

private HttpServletRequest servletRequest;
private static final Logger logger = Logger.getLogger(ListVulsActions.class);


private File secImage;
private String secImageContentType;
private String secImageFileName;


private HashMap userFilters = new HashMap();
public Test() {


}

public String saveOrUpdate() {
    try {

        ServletContext context = ServletActionContext.getServletContext();
        String filePath = context.getInitParameter("UploadDirectory");
        logger.debug("Server path:" + filePath);
        logger.debug("this.secImageFileName " + this.secImageFileName);

        File fileToCreate = new File(filePath, this.secImageFileName);

        FileUtils.copyFile(this.secImage, fileToCreate);

}           
        addActionMessage("successfully added/updated.");
        return SUCCESS;
    } catch (Exception ex) {
        logger.error("Error in Test", ex);
        addActionError("Error occured in Test. Please contact your administrator.\n" + ex.getMessage());
        return ERROR;
    }

}

public File getSecImage() {
            System.out.println(secImage.getName());
    return secImage;
}

/**
 * @param secImage the secImage to set
 */
public void setSecImage(File secImage) {
    System.out.println(secImage.getName());
    this.secImage = secImage;
}

/**
 * @return the secImageContentType
 */
public String getSecImageContentType() {
    System.out.println(secImageContentType);
    return secImageContentType;
}

/**
 * @param secImageContentType the secImageContentType to set
 */
public void setSecImageContentType(String secImageContentType) {
    System.out.println(secImageContentType);
    this.secImageContentType = secImageContentType;
}

/**
 * @return the secImageFileName
 */
public String getSecImageFileName() {
    System.out.println(secImageFileName);
    return secImageFileName;
}

/**
 * @param secImageFileName the secImageFileName to set
 */
public void setSecImageFileName(String secImageFileName) {
    System.out.println(secImageFileName);
    this.secImageFileName = secImageFileName;
}

@Override
public void setServletRequest(HttpServletRequest servletRequest) {

    this.servletRequest = servletRequest;



}

不确定我在这里做错了什么。希望有任何帮助/提示

--

【问题讨论】:

  • 哪个操作系统工作,哪个不工作?您为此遇到任何错误/异常?
  • 嗨,Umesh。我最初帖子中的代码不起作用。 Apache 日志的日志文件中没有错误。我只在操作错误消息中得到“”字段“secImage”的无效字段值...。除此之外,一切都很顺利。
  • 同样在上面的例子中,我错过了实际存在的文件和内容类型的 setter/getter 方法。我不确定为什么会收到 invalid field value 错误。这甚至发生在我的操作方法被调用之前。似乎 Struts 在调用 Action 类之前正在验证字段。但我不确定它在哪里以及为什么拒绝上传的文件。
  • 如果 secImage 不是 File,您将拥有 invalid field value errorstruts.apache.org/2.1.6/docs/…。您确定您正确调用表单中的操作吗?我看到您在表单中有saveOrUpdateVulMGR 操作,并且您在 struts.xml 文件中显示了另一个操作。
  • 嗨 Pigueiras,对不起,动作名称被错误地放在 XML 文件中。它实际上是 saveOrUpdateVulMGR。我已经仔细检查了该文件是有效的 JPG 或 PNG 文件,该文件位于 struts.xml 文件的允许内容中。文件名和内容类型的 getter/setter 方法也得到正确的文件名和内容类型

标签: jakarta-ee file-upload struts2


【解决方案1】:

取另一个变量名是&lt;s:file name的类型文件类型生成setter和getter private File secImage; getter &amp;setters()FileUtils.copyFile(this.secImage, fileToCreate);进行操作

【讨论】:

  • 谢谢 maabujji.. 添加新变量后它工作正常。谢谢
【解决方案2】:

1 - 检查 JSP 中的表单行必须包含:enctype="multipart/form-data"

例如:&lt;s:form theme="simple" enctype="multipart/form-data" &gt; 注意:如果您的 JSP 扩展,则父级也需要包含该行。

2 - 检查您定义的 setter 和 getter 方法是否正确。 struts2 FileUpload Problem

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 2017-01-14
    相关资源
    最近更新 更多