a1439754433 2013-07-17 01:29 采纳率: 0%
浏览 1305

struts2在上传文件时获得请求参数的问题

在struts2中可以通过
Map map = ActionContext.getContext().getParameters();
来获得表单中的数据信息,但当提交的表单格式为enctype="multipart/form-data",即在上传文件时通过上面的方式却得不到数据,在不在对应action中声明文件字段的情况下,如何获得struts2已经封装好了的文件及其他字段信息。
在struts2中确实会自动用common-fileupload把要上传的文件先传到服务器上的临时目录,我的问题是怎样在 不在action或实体中声明该字段的情况下获得该上传文件的信息,就像不在form表单中声明enctype="multipart/form-data",但能获得form表单的上传数据:Map map = ActionContext.getContext().getParameters()。
谢谢

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-06 09:51
    关注

    在 Struts 2 中,你可以通过使用 ActionContext 的 getParameters 方法来获取表单中的所有数据。但是,当表单的 enctype 设置为 multipart/form-data 时,表单中的文件将以二进制形式提交,而 getParameters 方法只能处理字符串类型的数据。因此,你不能使用 getParameters 方法来获取上传文件的信息。


    要获取上传文件的信息,你可以使用 Struts 2 的文件上传功能。首先,你需要在 struts.xml 文件中配置文件上传拦截器,然后在 Action 类中添加文件类型的属性以及相应的 getter 和 setter 方法。例如:

    private File file; // 文件类型的属性
    private String fileContentType; // 文件类型的属性
    private String fileFileName; // 文件名的属性
    
    public File getFile() {
        return file;
    }
    
    public void setFile(File file) {
        this.file = file;
    }
    
    public String getFileContentType() {
        return fileContentType;
    }
    
    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }
    
    public String getFileFileName() {
        return fileFileName;
    }
    
    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }
    

    在表单中,你需要指定文件上传域的名称为 file,例如:

    <form action="upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file" />
        <input type="submit" value="Upload" />
    </form>
    

    在表单提交时,Struts 2 会自动将上传的文件信息封装到 Action 类的属性中,例如我们上面提到的 file、fileContentType 和 fileFileName 属性。这些属性的值都可以在 Action 类的方法中使用。


    如果你想要在 Action 类的方法中获取上传文件的信息,你可以使用这些属性来获取文件对象、文件类型和文件名。例如:

    File file = getFile(); // 获取文件对象
    String fileContentType = getFileContentType(); // 获取文件类型
    String fileFileName = getFileFileName(); // 获取文件名
    

    你也可以使用 ServletActionContext 类的 getRequest() 方法来获取 HttpServletRequest 对象,然后使用该对象的 getParameter 方法来获取表单中的其他字段信息。例如:

    HttpServletRequest request = ServletActionContext.getRequest();
    String field1 = request.getParameter("field1"); // 获取表单中名为 "field1" 的字段的值
    String field2 = request.getParameter("field2"); // 获取表单中名为 "field2" 的字段的值
    
    评论

报告相同问题?

悬赏问题

  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择
  • ¥15 这款软件是什么?需要能满足我的需求
  • ¥15 SpringSecurityOauth2登陆前后request不一致