commons fileupload实现文件上传的实例代码

yizhihongxing

当我们需要在Web应用程序中实现文件上传功能时,可以使用Apache Commons FileUpload库来实现这个功能。下面将详细讲解如何使用该库来实现文件上传功能,包括添加依赖、编写实现代码等过程。

添加依赖

首先,在Maven项目中添加以下依赖项:

<dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.4</version>
</dependency>

编写代码

将以下代码复制到你的Java文件中,实现文件上传的功能:

@WebServlet("/FileUpload")
@MultipartConfig
public class FileUpload extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public FileUpload() {
        super();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String savePath = "D:/uploads/";

        File fileSaveDir = new File(savePath);
        if (!fileSaveDir.exists()) {
            fileSaveDir.mkdir();
        }

        try {
            List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
            for (FileItem item : items) {
                if (!item.isFormField()) {
                    String fileName = new File(item.getName()).getName();
                    String filePath = savePath + File.separator + fileName;
                    File storeFile = new File(filePath);
                    item.write(storeFile);
                    request.setAttribute("message", "文件上传成功!");
                }
            }
        } catch (Exception e) {
            request.setAttribute("message", "文件上传失败: " + e.getMessage());
        }
        request.getRequestDispatcher("/message.jsp").forward(request, response);;
    }

}

解释一下上述代码块的主要逻辑和作用:

  1. 在注解@MultipartConfig中,设置了上传文件保存目录的路径以及文件大小限制等配置。
  2. 字符串savePath指定了文件上传后的保存路径,可以根据自己的需要进行更改。
  3. 构建一个DiskFileItemFactory对象,用于处理文件上传请求。
  4. 构建ServletFileUpload对象,并调用parseRequest方法,解析上传请求中的所有文件。
  5. 遍历解析出的所有文件,如果不是表单字段,获取文件名并保存到服务器目录。
  6. 如果有异常,则将出错信息返回给客户端。

下面为具体的两个示例:

示例1

在这个示例中,我们将更改保存文件的路径,将上传的文件保存在项目的根目录下。

@WebServlet("/FileUpload")
@MultipartConfig
public class FileUpload extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public FileUpload() {
        super();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String savePath = request.getServletContext().getRealPath("/") + "uploads/";

        File fileSaveDir = new File(savePath);
        if (!fileSaveDir.exists()) {
            fileSaveDir.mkdir();
        }

        try {
            List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
            for (FileItem item : items) {
                if (!item.isFormField()) {
                    String fileName = new File(item.getName()).getName();
                    String filePath = savePath + File.separator + fileName;
                    File storeFile = new File(filePath);
                    item.write(storeFile);
                    request.setAttribute("message", "文件上传成功!");
                }
            }
        } catch (Exception e) {
            request.setAttribute("message", "文件上传失败: " + e.getMessage());
        }
        request.getRequestDispatcher("/message.jsp").forward(request, response);;
    }

}

示例2

在这个示例中,我们将添加一个表单来实现文件上传。表单中包含一个文本框和一个文件上传按钮。

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传测试</title>
</head>
<body>
    <form method="post" action="FileUpload" enctype="multipart/form-data">
        请输入您的名字:<input type="text" name="name">
        <br> 
        请选择要上传的文件:<input type="file" name="file">
        <br> <br> 
        <input type="submit" value="上传文件">
    </form>
</body>
</html>

由于中文字符会乱码,我们可以设置编码来避免这个问题:

<form method="post" action="FileUpload" enctype="multipart/form-data" accept-charset="UTF-8">

总结

本教程讲解了在Web应用程序中使用Apache Commons FileUpload库实现文件上传功能的全过程,包括添加依赖、编写实现代码、两个示例等。同时,我们也讲解了一些技巧,例如获取文件的名称、保存文件的路径等。

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

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • 详解java中String值为空字符串与null的判断方法

    下面是详细讲解“详解java中String值为空字符串与null的判断方法”的攻略: 背景介绍 在Java中,有时需要判断一个字符串变量的值是否为空。但是,空值并不仅指null。在某些情况下,空值还包括空字符串,即“”(包含零个字符的字符串)。这时就需要使用不同的方法来进行判断了。 判断字符串值是否为空字符串 在Java中判断一个字符串是否为空字符串时,我们…

    Java 2023年5月27日
    00
  • javaweb之web入门基础

    JavaWeb 之 Web 入门基础 简介 Java Web 是一种通过 Java 开发的应用程序,可通过互联网或局域网访问,具有可靠、安全和跨平台的特点,在互联网应用开发中具有广泛的应用。JavaWeb 主要分为三层:表现层、业务层、持久化层。其中,表现层主要负责用户交互和界面展示。 HTML 基础 HTML (Hypertext Markup Langu…

    Java 2023年5月19日
    00
  • 流式图表拒绝增删改查之kafka核心消费逻辑下篇

    首先我们需要了解一下本篇攻略讲解的是什么。 本文的主要内容是讲解如何将Kafka的核心消费逻辑结合流式图表进行可视化呈现,进而达到更好的监控和管理分布式系统的目的。 在具体讲解之前,我们需要明确几个概念: Kafka:一个高吞吐量、分布式的消息队列系统,主要用于解决大数据流的问题。 流式图表:一种可视化数据流的工具,可以通过图形化的方式展示数据流中的数据和流…

    Java 2023年5月20日
    00
  • Java滚动数组计算编辑距离操作示例

    下面是“Java滚动数组计算编辑距离操作示例”的完整攻略: 什么是编辑距离 编辑距离是指在计算两个字符串相似度时需要进行的操作数。这些操作包括插入、删除、替换等。编辑距离越小,两个字符串的相似度就越高。 算法原理 计算编辑距离的算法有很多种,其中比较常用的是动态规划算法。该算法采用一个二维数组存储每个子问题的最优解,通过填充此数组来求得整个问题的最优解。 由…

    Java 2023年5月26日
    00
  • Java 实现简易教务管理系统的代码

    Java 实现简易教务管理系统的代码攻略 简介 本文将介绍如何使用 Java 语言实现一个简易的教务管理系统,包括项目结构、涉及的技术、代码实现等方面的内容。 准备工作 在开始之前,我们需要做好以下准备工作: 安装 JDK(Java Development Kit) 安装 IDE(Integrated Development Environment,比如 E…

    Java 2023年5月19日
    00
  • Android应用开发中控制反转IoC设计模式使用教程

    下面就来详细讲解“Android应用开发中控制反转IoC设计模式使用教程”的完整攻略。 什么是控制反转(Inversion of Control)设计模式 控制反转是一种设计模式,用于解决简单的对象之间的处理与业务分离,使得程序更加容易维护。 在典型的Android应用程序中,一个 activity 或 fragment 负责生命周期的管理及更新视图,而业务…

    Java 2023年6月1日
    00
  • struts2中一个表单中提交多个请求的例子(多个提交按钮)

    在struts2中实现一个表单中提交多个请求的例子,常见的方法是使用多个提交按钮,每个按钮对应一个请求。以下是详细的步骤: 1. 编写表单 首先在jsp页面中编写表单,并使用<s:submit>标签来生成提交按钮。每个不同的提交按钮会绑定不同的请求。例如: <s:form action="processForm">…

    Java 2023年5月20日
    00
  • Jedis操作Redis数据库的方法

    Jedis是一个Java语言编写的Redis客户端库,它支持多种Redis的操作,并提供了丰富的API供开发者使用。本攻略将详细讲解Jedis操作Redis数据库的方法,包括连接Redis、CRUD操作、事务操作、管道操作和Jedis连接池的使用。 连接Redis Jedis连接Redis非常简单,只需要指定Redis的IP地址和端口即可。以下是连接Redi…

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