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日

相关文章

  • java计算代码段执行时间的详细代码

    下面我来详细讲解一下Java计算代码段执行时间的流程和代码。 问题背景 在开发过程中,我们常常需要测试代码的执行时间,以便优化和改进代码的性能。例如,我们需要知道某段代码的运行时间,以便在性能敏感的应用中进行优化,或者判断代码是否需要并行化等。 解决方案 Java提供了System.currentTimeMillis()方法和System.nanoTime(…

    Java 2023年5月20日
    00
  • Java 重载、重写、构造函数的实例详解

    Java是一门支持面向对象的编程语言,重载、重写、构造函数是Java面向对象编程中的重要概念。本文将为你详细讲解Java的重载、重写、构造函数的实例详解。 Java 重载 函数重载是指函数名称相同,但参数列表不同的一组函数。Java允许使用重载的方法、构造函数和操作符。以下是Java重载函数的实例: public class OverloadDemo { p…

    Java 2023年5月26日
    00
  • 带你详细了解Spring Security的注解方式开发

    让我来详细讲解一下“带你详细了解Spring Security的注解方式开发”的完整攻略。 什么是Spring Security? Spring Security是一个基于Spring框架的安全框架,它提供了一组细粒度的安全性控制手段,并可以轻松地与其他Spring框架集成使用。Spring Security主要包括认证、授权和攻击防护等功能,可以帮助Web…

    Java 2023年5月20日
    00
  • JavaSpringBoot报错“HeuristicRollbackException”的原因和处理方法

    原因 “HeuristicRollbackException” 错误通常是以下原因引起的: 事务问题:如果您的事务存在问题,则可能会出现此错误。在这种情况下,需要检查您的事务并确保它们正确。 并发问题:如果您的应用程序存在并发问题,则可能会出现此错误。在这种情况下,您需要检查您的应用程序并确保它们正确。 数据库问题:如果您的数据库存在问题,则可能会出现此错误…

    Java 2023年5月4日
    00
  • Java线程池由浅入深掌握到精通

    Java线程池从入门到精通 Java线程池是一种多线程处理机制,用于管理和调度多个线程。通过线程池,可以复用线程、控制线程数量,从而提高程序并发处理能力和资源利用率。 1. 初识Java线程池 1.1 线程池的优点 使用线程池具有以下优点: 降低线程创建和销毁带来的性能损耗; 通过重用线程来优化程序性能; 可以对线程数量进行限制和控制,避免系统资源被消耗殆尽…

    Java 2023年5月19日
    00
  • jsp response.sendRedirect不跳转的原因分析及解决

    针对“jsp response.sendRedirect不跳转的原因分析及解决”,以下是完整攻略: 1. 确认response.sendRedirect是否执行 首先要确认response.sendRedirect是否真正执行了。可以通过在response.sendRedirect前后,分别加入System.out.println语句,输出一些信息,在控制台…

    Java 2023年6月15日
    00
  • Spring MVC学习教程之视图深入解析

    “Spring MVC学习教程之视图深入解析”是一篇关于 Spring MVC 视图的深度解析的文章,主要介绍了 Spring MVC 中视图的相关知识。下文将详细讲解该文章的完整攻略。 一、文章概述 文章分为四个部分,分别是 “前言”、“视图简介”、“视图技术解析” 和 “总结”。下文将对各个部分进行详细解释。 1. 前言 文章从 Spring MVC 的…

    Java 2023年6月15日
    00
  • Java实现二叉树的基本操作详解

    Java实现二叉树的基本操作详解 二叉树是一种非常常见的树形结构,由于它的具有良好的数据存储和查询性能,在实际开发中也经常使用到。本文将介绍如何使用Java语言实现二叉树的基本操作,包括构建二叉树、插入节点、删除节点、查找节点等功能。 二叉树节点的定义 首先,我们需要定义一个二叉树节点类,它包含三个属性,分别是节点值、左子节点和右子节点,定义如下: clas…

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