Java中使用fileupload组件实现文件上传功能的实例代码

介绍

Java Web开发中,文件上传功能是一个非常常见和基础的功能。而使用fileupload组件实现文件上传,不仅方便易用,而且功能强大,能够满足大多数文件上传需求。

本文将介绍如何使用fileupload组件实现文件上传功能的实例代码并附有完整代码和两个示例供您参考。在实现文件上传的过程中,我们需要引入Apache Commons FileUpload组件和Apache Commons IO组件。下面我们将详细讲解这个过程。

步骤

  1. 下载和引入Apache Commons FileUpload组件和Apache Commons IO组件到项目中。可以在 Maven 中直接使用以下代码:
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.8.0</version>
    </dependency>
  1. 在HTML表单中添加上传文件的输入框:
    <form action="upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="Upload">
    </form>

其中,form的action属性设为上传文件处理的Handler,这里设为"upload"。input元素的name属性为"file",后面在Java代码中需要通过这个名字来获取上传的文件数据。

  1. 在Java代码中,接收表单提交的数据,并处理上传文件的操作。

代码示例1:上传文件并保存到指定目录

    @PostMapping("upload")
    public String upload(HttpServletRequest request) throws IOException, ServletException {
        // 使用DiskFileItemFactory创建FileItem对象
        DiskFileItemFactory factory = new DiskFileItemFactory();
        // 定义文件缓存路径和缓存大小限制
        factory.setRepository(new File("C:/temp"));
        factory.setSizeThreshold(1024 * 1024 * 10);
        // 使用ServletFileUpload解析表单数据
        ServletFileUpload upload = new ServletFileUpload(factory);
        // 设置单个文件的大小限制,这里限制为10MB
        upload.setFileSizeMax(1024 * 1024 * 10);

        List<FileItem> formItems = upload.parseRequest(request);
        if (formItems != null && formItems.size() > 0) {
            // 迭代表单数据
            for (FileItem item : formItems) {
                // 处理普通表单字段
                if (item.isFormField()) {
                    String fieldName = item.getFieldName();
                    String fieldValue = item.getString();
                    // handle form field ...
                }
                // 处理上传的文件
                else {
                    String fileName = item.getName();
                    String filePath = "C:/upload/" + fileName;
                    File storeFile = new File(filePath);
                    // 在控制台输出文件的上传路径
                    System.out.println(storeFile.getAbsolutePath());
                    // 保存文件到磁盘
                    item.write(storeFile);
                }
            }
        }
        return "upload_success";
    }

代码解释:

该代码使用了DiskFileItemFactory和ServletFileUpload类完成文件上传的操作。

  • DiskFileItemFactory。创建FileItem对象,并来设置缓存区及其大小等
  • ServletFileUpload。解析上传的文件,包括获取多个上传的文件及其名字等信息。

在代码中,我们首先通过DiskFileItemFactory设置了缓存路径为"C:/temp",缓存大小为10 MB。创建了ServletFileUpload类对象后,我们也设置了最大上传文件大小为10MB。

接着,我们调用upload.parseRequest(request)方法获取表单数据。然后,我们遍历FileItem集合,并使用isFormField方法判断如果这个FileItem对象表示一个上传的文件,则把文件保存到指定目录中。

代码示例2:上传文件并读取文件内容

在这个示例中,我们通过上传文件并读取文件内容的方式获取上传文件的内容。

    @PostMapping("upload")
    public String upload(HttpServletRequest request) throws IOException, ServletException {
        String fileName = null;
        InputStream fileContent = null;
        try {
            Part filePart = request.getPart("file"); // 获取上传文件的Part
            fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();
            fileContent = filePart.getInputStream(); // 获取上传文件的输入流
            // 处理上传文件的内容
            String fileContentStr = new String(fileContent.readAllBytes(), "UTF-8");
            System.out.println("上传的文件内容:" + fileContentStr);
        } catch (IOException | ServletException e) {
            e.printStackTrace();
        } finally {
            if (fileContent != null) {
                fileContent.close();
            }
        }
        return "upload_success";
    }

代码解释:

我们使用Java Servlet 3 API的Part类来访问上传文件的内容。在代码中,我们通过文件名获取了上传文件的输入流,从而获取了文件内容。注意,这里我们使用了readAllBytes方法读取文件内容并且指定了编码格式为UTF-8。

结束语

这样,我们就完成了Java中使用fileupload组件实现文件上传功能的实例代码。在实际应用中,我们可以根据实际需要,对代码进行适当修改,以满足不同的上传需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中使用fileupload组件实现文件上传功能的实例代码 - Python技术站

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

相关文章

  • java获取日期之间天数的方法

    获取日期之间天数的方法可以通过Java标准库中的日期类来实现。下面是完整攻略: Java获取日期之间天数的方法 用Java标准库实现日期比较 Java标准库中提供了许多日期类,例如 java.util.Date、java.time.LocalDate、java.time.LocalDateTime等。其中java.time包下的类是Java8引入的,使用起来…

    Java 2023年5月20日
    00
  • 如何简单使用mybatis注解

    下面我来详细讲解如何简单使用mybatis注解。 1. 引入mybatis注解依赖 首先在项目中引入mybatis注解依赖,例如: <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <ver…

    Java 2023年5月20日
    00
  • idea使用Mybatis逆向工程插件详情

    下面是关于“idea使用Mybatis逆向工程插件详情”的完整攻略。 1. 环境准备 首先你需要准备好以下环境:- IDEA编辑器- Mybatis逆向工程插件- 数据库连接 如果还没有准备好,可以使用以下链接获取:- IDEA编辑器- Mybatis逆向工程插件- 数据库连接 2. 安装Mybatis逆向工程插件 步骤如下:- 在IDEA编辑器中选择 “F…

    Java 2023年5月20日
    00
  • Java小程序求圆的周长和面积实例 原创

    Java小程序求圆的周长和面积实例 原创 程序概述 此程序通过输入圆的半径,计算出圆的周长和面积,并将计算结果输出。 程序实现 首先,需要定义一个Circle类,用于存储圆的半径和计算周长和面积的方法。代码如下所示: public class Circle { private double radius;//定义半径 public Circle(double…

    Java 2023年5月23日
    00
  • Java和SQL实现取两个字符间的值

    要实现取两个字符间的值,可以使用Java的字符串截取和SQL的substr函数两种方法。 Java实现 1. 使用String.substring方法 使用String.substring方法可以截取原字符串中两个索引位置之间的子串。 String str = "Hello World"; String result = str.subs…

    Java 2023年5月27日
    00
  • java 中用split分割字符串,最后的空格等不被拆分的方法

    让我来详细讲解一下如何在Java中使用split方法分割字符串,同时可以让最后的空格等不被拆分。 1. 使用正则表达式指定分隔符 在Java中,使用split方法分割字符串时,可以通过正则表达式来指定字符串的分隔符。如果要保留最后的空格,可以在分隔符字符串中使用”\s*$”,表示以零个或多个空格结尾。具体的代码如下: String str = "T…

    Java 2023年5月27日
    00
  • 详解spring-data-jpa中jpql的投影查询

    下面是详解spring-data-jpa中jpql的投影查询的完整攻略: 1. 简介 在Spring Data JPA中,JPQL是常用的查询语言。JPQL是对象查询语言,它不仅支持基本查询,还支持复杂查询和投影查询。 投影查询是指只选取符合条件的列,而不查询整个实体。这样可以提高查询效率和减少传输的数据量。下面将介绍如何在Spring Data JPA中使…

    Java 2023年5月20日
    00
  • Windows下搭建Tomcat HTTP服务并发布外网远程访问

    以下是Windows下搭建Tomcat HTTP服务并发布外网远程访问的完整攻略: 1. 安装Java环境 首先需要在本地安装好Java环境,可以到Java官网下载安装包进行安装。 2. 下载Tomcat并解压缩 可在Tomcat官网下载对应版本的Tomcat,下载完成后解压缩到本地的目录,比如:D:\Java\Tomcat。 3. 配置Tomcat 3.1…

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