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

当我们需要在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日

相关文章

  • Struts2学习笔记(9)-Result配置全局结果集

    首先我们需要了解什么是Struts2的Result配置。 在Struts2中,Result是将Action执行后返回的结果封装成一个对象,通常包含视图名称、视图类型和一些其它相关的信息。通过配置Result,我们可以指定如何处理Action执行后返回的结果,例如将结果转发到某个JSP或者跳转到某个URL等。 全局结果集是一种在Struts2中配置全局Resu…

    Java 2023年5月20日
    00
  • Java输入数据的知识点整理

    Java输入数据的知识点整理 在Java编程中,输入数据是非常重要的一部分,如果没有正确的输入数据,程序很难执行下去。本文将详细介绍Java输入数据的知识点整理,包括以下内容: Java.util.Scanner类 标准输入流和标准输出流 System.console()方法 示例说明 Java.util.Scanner类 Scanner类为读取用户输入提供…

    Java 2023年5月26日
    00
  • Java简易计算器程序设计

    下面我就给您讲解Java简易计算器程序设计的完整攻略。 1. 确定需求 在开始设计Java简易计算器程序之前,我们需要先明确需求,即我们要实现什么样的功能。在这里,我们可以列出计算器程序的基本功能: 支持基本的加减乘除四则运算 支持小数计算 支持括号功能 2. 设计代码框架 在明确需求之后,我们需要开始设计Java程序的代码框架。我们可以将计算器程序分成以下…

    Java 2023年5月23日
    00
  • 基于jsp+mysql实现在线水果销售商城系统

    系统环境搭建 首先需要安装JDK和Tomcat,并进行相关配置;接着安装MySQL数据库,并在其中创建相应的数据库和表格结构。 JSP页面设计 设计网站的前端界面,包括首页、商品详情页、购物车、结算页面等,需要使用HTML、CSS、JavaScript等前端技术进行实现。 后台服务搭建 基于Java语言使用JSP技术实现后台管理服务,包括用户登录、用户注册、…

    Java 2023年6月15日
    00
  • java 获取日期的几天前,几个月前和几年前的实例

    获取日期的几天前、几个月前和几年前可以使用Java中的Calendar类来实现。具体步骤如下: 1.通过Calendar.getInstance()方法获取当前时间的Calendar实例。 2.使用Calendar类的add方法修改时间,其中第一个参数是修改时间的字段(例如,Calendar.DAY_OF_YEAR表示修改年中的天数),第二个参数是修改的值,…

    Java 2023年5月20日
    00
  • java基础入门之IO流

    Java基础入门之IO流 本文主要介绍Java IO流的基础知识,包括IO流的概述、IO流分类、IO流的读取和写入操作以及常用IO流示例。 IO流概述 Java IO(Input/Output)流是一种用于处理输入/输出的机制。它提供了一种操作任意数据源的方式,包括磁盘文件、网络连接等等。 Java IO流由四个抽象类组成: InputStream:字节输入…

    Java 2023年5月26日
    00
  • Java搜索与图论之DFS和BFS算法详解

    Java搜索与图论之DFS和BFS算法详解 DFS算法基本原理 DFS(深度优先搜索)指的是从图的某个顶点出发,访问其所有能到达的顶点,并且尽可能深的搜索其中一支支路径的搜索算法。遍历过的点存放到形成的树中。树中每个结点的祖先结点都位于它的所有子树中,它的祖先结点包括它父亲结点和它父亲的祖先结点。DFS一般采用递归或者栈实现,其算法流程如下: 访问起始顶点 …

    Java 2023年5月19日
    00
  • 解决java字符串转换成时间Unparseable date出错的问题

    当将一个Java字符串转换为时间对象时,有时候会出现“Unparseable date”(无法解析日期)的错误,这是非常常见的错误。通常情况下,这个问题是由于日期字符串与SimpleDateFormat模式字符串不匹配造成的。下面是解决此问题的完整攻略。 步骤1:确定日期格式 首先,需要确定原始日期的格式。在Java中,使用SimpleDateFormat类…

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