SSH框架网上商城项目第13战之Struts2文件上传功能

下面就给您讲解一下“SSH框架网上商城项目第13战之Struts2文件上传功能”的完整攻略。

一、Struts2文件上传功能简介

Struts2文件上传功能是指在Struts2框架中,用户可以通过向服务器提交文件的方式来实现文件上传的功能。Struts2文件上传功能通常采用Apache Commons FileUpload库来实现,可以对上传的文件进行大小、类型等方面的限制,同时支持上传多个文件。

二、实现Struts2文件上传的步骤

下面是实现Struts2文件上传功能的步骤:

1.在Struts2配置文件中添加上传功能的拦截器

在Struts2配置文件中,需要添加一个用于处理文件上传的拦截器,一般会用Apache Struts2文件上传拦截器,具体配置如下:

<interceptors>
  <interceptor name="myFileUpload"
      class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
  <interceptor-stack name="myDefault">
      <interceptor-ref name="defaultStack"/>
      <interceptor-ref name="myFileUpload"/>
  </interceptor-stack>
</interceptors>

2.在Action类中添加上传文件属性及其get和set方法

在Action类中,需要添加一个用于保存上传文件的属性,同时定义获取和设置该属性的get和set方法,具体代码如下:

private File file; // 用于保存上传文件
private String fileFileName; // 上传文件的文件名
private String fileContentType; // 上传文件的类型

public File getFile() {
  return file;
}

public void setFile(File file) {
  this.file = file;
}

public String getFileFileName() {
  return fileFileName;
}

public void setFileFileName(String fileFileName) {
  this.fileFileName = fileFileName;
}

public String getFileContentType() {
  return fileContentType;
}

public void setFileContentType(String fileContentType) {
  this.fileContentType = fileContentType;
}

3.在Action类中添加处理文件上传的方法

在Action类中,需要为上传文件新增一个处理方法,一般建议将该方法命名为doUpload()。在该方法中,需要定义一个FileInputStream对象,从而从上传的文件中读取数据,并将数据写入到服务器指定的文件中。具体代码如下:

public String doUpload() throws Exception {
    FileInputStream fileInputStream = new FileInputStream(file);
    String filePath = "D:\\" + fileFileName;
    FileOutputStream fileOutputStream = new FileOutputStream(filePath);
    byte[] buffer = new byte[1024];
    int len = 0;
    while ((len = fileInputStream.read(buffer)) > 0) {
        fileOutputStream.write(buffer,0,len);
    }
    fileInputStream.close();
    fileOutputStream.close();
    return SUCCESS;
}

4.通过表单页面上传文件

最后一步是编写上传文件的表单页面。表单中需要定义一个file类型的input标签,以便用户选择要上传的文件。具体代码如下:

<s:form action="doUpload" method="post" enctype="multipart/form-data">
  <s:file name="file" label="上传文件"/>
  <s:submit/>
</s:form>

三、Struts2文件上传功能的限制

为了保证系统的安全性和稳定性,通常需要对Struts2文件上传功能进行一些限制:

  • 限制上传文件的大小,防止上传过大的文件导致服务器崩溃;
  • 限制上传文件的类型,防止上传不受控制的文件类型,如webshell等;
  • 限制上传文件的数量,防止上传过多文件导致系统资源的浪费。

下面是实现文件上传限制的代码示例:

限制上传文件的大小

<interceptors>
  <interceptor name="myFileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor">
      <param name="maximumSize">1024000</param> <!-- 上传文件的最大大小为1024KB -->
  </interceptor>
  <interceptor-stack name="myDefault">
      <interceptor-ref name="defaultStack"/>
      <interceptor-ref name="myFileUpload"/>
  </interceptor-stack>
</interceptors>

限制上传文件的类型

<interceptors>
  <interceptor name="myFileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor">
      <param name="allowedTypes">image/jpeg,image/png</param> <!-- 上传文件的类型只允许为jpeg和png格式 -->
  </interceptor>
  <interceptor-stack name="myDefault">
      <interceptor-ref name="defaultStack"/>
      <interceptor-ref name="myFileUpload"/>
  </interceptor-stack>
</interceptors>

限制上传文件的数量

<interceptors>
  <interceptor name="myFileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor">
      <param name="maximumSize">1024000</param> <!-- 上传文件的最大大小为1024KB -->
      <param name="allowedTypes">image/jpeg,image/png</param> <!-- 上传文件的类型只允许为jpeg和png格式 -->
      <param name="maximumFiles">5</param> <!-- 上传的文件数量最多为5个 -->
  </interceptor>
  <interceptor-stack name="myDefault">
      <interceptor-ref name="defaultStack"/>
      <interceptor-ref name="myFileUpload"/>
  </interceptor-stack>
</interceptors>

四、示例

下面给出两个Struts2文件上传的示例:

示例1:上传单个文件

以上传一张图片为例来演示单个文件上传的过程。

  1. 编写上传文件的表单页面:
<s:form action="doUpload" method="post" enctype="multipart/form-data">
  <s:file name="file" label="上传图片"/>
  <s:submit/>
</s:form>
  1. 编写Action类代码
public class UploadAction extends ActionSupport {
    private File file;
    private String fileFileName;
    private String fileContentType;

    public File getFile() {
        return file;
    }

    public void setFile(File file) {
        this.file = file;
    }

    public String getFileFileName() {
        return fileFileName;
    }

    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }

    public String getFileContentType() {
        return fileContentType;
    }

    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }

    public String doUpload() throws Exception {
        FileInputStream fileInputStream = new FileInputStream(file);
        String filePath = "D:\\" + fileFileName;
        FileOutputStream fileOutputStream = new FileOutputStream(filePath);
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = fileInputStream.read(buffer)) > 0) {
            fileOutputStream.write(buffer,0,len);
        }
        fileInputStream.close();
        fileOutputStream.close();
        return SUCCESS;
    }
}

示例2:上传多个文件

以上传多张图片为例来演示多个文件上传的过程。

  1. 编写上传多个文件的表单页面:
<s:form action="doUpload" method="post" enctype="multipart/form-data">
  <s:file name="files" label="选择图片" multiple="true"/>
  <s:submit/>
</s:form>

注意:添加多个文件上传的功能需要在文件框中添加multiple="true"属性。

  1. 编写Action类代码
public class UploadAction extends ActionSupport {
    private List<File> files;
    private List<String> filesFileName;
    private List<String> filesContentType;

    public List<File> getFiles() {
        return files;
    }

    public void setFiles(List<File> files) {
        this.files = files;
    }

    public List<String> getFilesFileName() {
        return filesFileName;
    }

    public void setFilesFileName(List<String> filesFileName) {
        this.filesFileName = filesFileName;
    }

    public List<String> getFilesContentType() {
        return filesContentType;
    }

    public void setFilesContentType(List<String> filesContentType) {
        this.filesContentType = filesContentType;
    }

    public String doUpload() throws Exception {
        for (int i = 0; i < files.size(); i++) {
            FileInputStream fileInputStream = new FileInputStream(files.get(i));
            String filePath = "D:\\" + filesFileName.get(i);
            FileOutputStream fileOutputStream = new FileOutputStream(filePath);
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = fileInputStream.read(buffer)) > 0) {
                fileOutputStream.write(buffer,0,len);
            }
            fileInputStream.close();
            fileOutputStream.close();
        }
        return SUCCESS;
    }
}

五、总结

以上就是实现Struts2文件上传功能的完整攻略,主要涉及到Struts2文件上传的步骤、限制和示例。需要注意的是,在进行文件上传操作时,一定要注意对文件大小、文件类型和上传数量等方面进行限制,以确保系统的安全性和稳定性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SSH框架网上商城项目第13战之Struts2文件上传功能 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • MyBatis执行动态SQL的方法

    MyBatis 是一款开源的持久化框架,支持动态 SQL 的执行,可以方便地编写灵活的 SQL 语句,本文将详细讲解 MyBatis 执行动态 SQL 的方法,包括以下内容: 动态 SQL 的概念与背景 MyBatis 中执行动态 SQL 的方法 MyBatis 中使用动态 SQL 的示例 1. 动态 SQL 的概念与背景 传统的 SQL 语句是静态的,不能…

    Java 2023年5月19日
    00
  • JAVA实现连接本地打印机并打印文件的实现代码

    Java实现连接本地打印机并打印文件的实现代码需要以下步骤: 步骤一:导入打印相关的依赖库 Java中的javax.print包提供了打印相关的API,需要在项目中导入此包相关的依赖,可以使用Maven等方式进行导入。 步骤二:获取系统中支持的打印机 可以通过javax.print.PrintServiceLookup类的lookupPrintService…

    Java 2023年5月19日
    00
  • Java 实战项目之疫情人员流动管理系统详解

    Java 实战项目之疫情人员流动管理系统详解 什么是疫情人员流动管理系统? 疫情人员流动管理系统是一种可以管理和跟踪疫情期间人员流动的系统,它可以记录人员的基本信息、行程信息和健康情况等,并能够根据这些信息做出对应的管理和应对措施。该系统可以帮助政府和社区及时掌握疫情人员的相关情况,从而有效地减缓疫情的传播。 开发该系统需要掌握的技能和工具 Java 编程语…

    Java 2023年5月31日
    00
  • SpringBoot整合mybatis常见问题(小结)

    针对SpringBoot整合mybatis常见问题,我整理了以下攻略。 一、问题背景 1.1 spring boot整合mybatis报错 经常会出现spring boot整合mybatis后报错的情况,比如找不到mapper文件、无法注入mapper bean等等。 1.2 解决方案 下面我将介绍两种解决方案: 方案一:配置mapper文件路径 对于找不到…

    Java 2023年5月15日
    00
  • 关于Ubuntu Server 18.04 LTS 安装Tomcat并配置systemctl管理Tomcat服务的问题

    下面是详细讲解如何在Ubuntu Server 18.04 LTS系统上安装Tomcat并配置systemctl管理Tomcat服务的完整攻略。 1. 安装Tomcat 在Ubuntu Server 18.04 LTS系统上安装Tomcat的方法如下: 软件包更新:需要更新软件包列表和已安装软件包,以防止出现软件包依赖错误等问题,在终端中执行以下命令: su…

    Java 2023年5月19日
    00
  • Mybatis的入门示例代码

    下面是关于Mybatis的入门示例代码的完整攻略。 一、Mybatis入门概述 Mybatis是一个开源的ORM(Object Relational Mapping)框架,它可以将数据库中的数据直接封装成Java对象。通过Mybatis,我们不再需要手动编写一些复杂的JDBC代码,只需要编写一些简单的XML文件和Java代码就可以完成对数据库的操作。 二、环…

    Java 2023年5月19日
    00
  • Java Character类对单个字符操作原理解析

    Java Character类对单个字符操作原理解析 在Java中,Character类是一个非常重要的类,主要用于对单个字符的操作。它包含了一些静态方法和实例方法,可以用于判断字符的数字、大小写、空格、是否是字母等,下面我们来详细讲解这个类的一些方法和原理。 Character类的构造方法 Character(char c) 创建一个新的 Characte…

    Java 2023年5月27日
    00
  • Java实现文件监控器FileMonitor的实例代码

    下面我将为您详细介绍Java实现文件监控器FileMonitor的实例代码攻略。 FileMonitor简介 FileMonitor是Java文件监控器的一种实现方式。它可以用于监控指定目录下的文件或文件夹的变化,包括文件的创建、修改、删除等操作,以便及时做出相应的处理。 实现步骤 引入相关依赖 使用FileMonitor需要引入相应的依赖,其中最重要的是c…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部