当前位置: 首页 > 知识库问答 >
问题:

Struts2 Fileupload在动作类中给出空文件

常茂
2023-03-14

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

指数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>

文件上传操作。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);

检查它返回的内容,我得到空值。

共有1个答案

史鸿运
2023-03-14

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>

使用

  • 文件上载拦截器的两倍

就这么做

<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);

这是文件,而不是文件名,顺便说一句,文件名在另一个变量中传递。

修复此问题并重试。还要注意,使用

 类似资料:
  • 我正在尝试在Configuration类中自动生成一个类,如下所示: [编辑]在我的日志中没有例外,因为如果该对象为空,将不会使用该对象。下面是我在日志文件中看到的日志条目: [编辑]这里是主类--

  • 我使用正则表达式删除了XML中一些不需要的项。现在,我需要打印所有包含多个子元素的包含服务节点。 这是我使用的代码; 如果我运行这个,我会得到下面的响应。 但是,我可以将选定的元素打印到包括服务节点之外。请帮帮忙!

  • 我只是试图通过代码将文件上传到服务器,如果我从模拟器访问文件, 路径data/app/07312012_135528.3gp并获得服务器响应200,确定 但当我通过设备访问文件上传时,会给出错误400,当文件存在于SDCard中时,它会通过file.exists()检查。 我的手机是三星Galaxy Ace 但当我尝试从设备中的相同路径播放时,它会成功地播放音频 我不明白问题出在哪里,请帮帮我

  • 在标记项处获取NullPointerException。getKey(),不明白问题出在哪里

  • 我正在使用新的GitHub操作,下面的工作流的想法是当pr打开或同步时运行,它应该首先检查并安装依赖项,然后运行几个纱线脚本 目前它成功地进入了结帐阶段,但是一旦安装作业运行,我就会出现以下错误 错误:找不到包。“/home/runner/work/myRepo/myRepo”中的json文件 从这个结帐失败或者我在一个错误的文件夹中判断?

  • 我正在尝试使用Animation类设置ConstraintLayout高度的动画,而setDuration方法似乎不起作用。高度立即更改为所需的高度值。我在开发者选项中看到过关于动画被禁用的帖子,但这不是问题,它设置为1x。无论如何,代码如下: