一尘不染

Struts2 Fileupload在操作类中提供空文件

jsp

我正在尝试使用struts2 fileUpload拦截器在我的Web应用程序中实现文件上传过程。下面是我的代码

index.jsp

<tags:form action="fileUpload" method="post" enctype="multipart/form-data">
   <tags:file name="fileUpload" label="Choose File"/>
   <tags:submit value="Upload"/>     
</tags:form>

struts.xml

<action name="fileUpload" class="com.hibernate.action.FileUploadAction">
    <interceptor-ref name="fileUploadStack"/>
    <interceptor-ref name="fileUpload">
        <param name="maximumSize">1024000</param>
        <param name="allowedTypes">application/pdf</param>
    </interceptor-ref>
    <result name="success">/viewChapters.jsp</result>
</action>

FileUploadAction.java

public class FileUploadAction extends ActionSupport
{
private File fileUpload;
private String contentType;
private String fileName;
private String destPath;
/// setter and getter methods
 public String execute()
{
    destPath="C:\\WebPortal_testing";
    try
    {
        System.out.println("Source File Name:"+fileUpload);
        System.out.println("Destination File Name:"+fileName);

        File destFile= new File(destPath,fileName);
        FileUtils.copyFile(fileUpload, destFile);
    }
    catch(IOException exception)
    {
        exception.printStackTrace();
        return ERROR;
    }
    return SUCCESS;
 }

当我在index.jsp页面中选择一个pdf文件并单击上载按钮时,它为操作类的fileUpload字段提供了空值。

我在调试模式下执行应用程序,并为此

System.out.println("Source File Name:"+fileUpload);

检查它返回什么,我得到空。


阅读 317

收藏
2020-06-08

共1个答案

一尘不染

1.拦截器配置错误

FileUploadStack是:

<!-- Sample file upload stack -->
<interceptor-stack name="fileUploadStack">
    <interceptor-ref name="fileUpload"/>
    <interceptor-ref name="basicStack"/>
</interceptor-stack>

那么您真正定义的是:

    <interceptor-ref name="fileUpload"/>
    <interceptor-ref name="basicStack"/>
    <interceptor-ref name="fileUpload">
        <param name="maximumSize">1024000</param>
        <param name="allowedTypes">application/pdf</param>
    </interceptor-ref>

使用

  • 两次fileUpload拦截器
  • 仅对第二个应用对maximumSize和allowedTypes的限制。

做就是了

<interceptor-ref name="fileUploadStack">
    <param name="fileUpload.maximumSize">1024000</param>
    <param name="fileUpload.allowedTypes">application/pdf</param>
</interceptor-ref>

2.文件属性错误

内容类型和文件名属性必须以文件属性名开头。

在您的情况下:

private File fileUpload;
private String fileUploadContentType;
private String fileUploadFileName;

您可以找到有关此问题的完整示例。


3.您正在打印文件而不是文件名

System.out.println("Source File Name:"+fileUpload);

那是文件,不是文件名,而文件名是在另一个变量中传递的。


解决此问题,然后重试。另请注意,<tags:当全世界都在使用时,将其用作前缀是不安全的<s:。这样做没有任何好处,只有并发症。只需使用<s:

2020-06-08