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日

相关文章

  • 玩转SpringBoot中的那些连接池(小结)

    玩转SpringBoot中的那些连接池(小结) 连接池是每个Web应用中必不可少的组件,Spring Boot中默认提供了大量连接池实现,例如HikariCP、Tomcat JDBC、Commons DBCP2等等。本文将介绍这些连接池的优缺点,帮助开发者选择适合自己应用的连接池。 HikariCP HikariCP是Spring Boot中默认的连接池实现…

    Java 2023年5月19日
    00
  • java的Hibernate框架报错“ConnectionReleaseModeException”的原因和解决方法

    当使用Java的Hibernate框架时,可能会遇到“ConnectionReleaseModeException”错误。这个错误通常是由于以下原因之一引起的: 无效的连接释放模式:如果您的连接释放模式无效,则可能会出现此错误。在这种情况下,需要检查您的连接释放模式以解决此问题。 Hibernate版本不兼容:如果您的Hibernate版本不兼容,则可能会出…

    Java 2023年5月4日
    00
  • Java之Pattern.compile函数用法详解

    Java之Pattern.compile函数用法详解 什么是Pattern.compile函数 Pattern.compile是Java正则表达式中的一个方法,可以用来编译正则表达式并生成一个Pattern对象。该对象可以被用于创建Matcher对象,以执行匹配操作。 Pattern.compile函数的语法 下面是Pattern.compile函数的语法:…

    Java 2023年5月26日
    00
  • java常用Lambda表达式使用场景源码示例

    Java常用Lambda表达式使用场景源码示例 什么是Lambda表达式? Lambda表达式是Java 8引入的新特性之一,它是一个匿名函数,可以传递到函数式接口中使用。Lambda表达式提供了一个简单而强大的语法来处理集合数据,比传统的循环语句更加简洁易懂。 Lambda表达式的语法格式为:(parameters) -> expression 或 …

    Java 2023年5月26日
    00
  • Jdk中没有jre文件夹怎么办?如何解决?

    当我们下载JDK(Java Development Kit)的安装包时,它包含了JRE(Java Runtime Environment)文件夹,因为JRE的存在意味着可以同时运行Java程序和Java应用程序。然而,有些时候我们会下载不包含JRE文件夹的JDK安装包,这个时候就需要手动添加JRE文件夹才能正常运行Java程序。下面是在Windows系统下的…

    Java 2023年5月26日
    00
  • Java集合List与Array的相互转换

    下面就为你详细讲解Java集合List与Array的相互转换。 List转Array 1.使用toArray()方法 将List转为数组最简单的方式就是使用List提供的toArray()方法。该方法返回一个持有此列表元素的数组。 List<String> list = new ArrayList<>(); list.add(&quo…

    Java 2023年5月26日
    00
  • 常见的Java字节码插装工具有哪些?

    常见的Java字节码插装工具有很多,其中比较常用的有ASM、Javassist、Byte Buddy和Instrumentation,下面具体介绍它们的使用方法以及示例。 一、 ASM 1.1 简介 ASM是一个Java字节码操作框架,它可以用来动态生成和转换Java字节码。与Java自带的Instrumentation机制类似,ASM扫描字节码时,会向字节…

    Java 2023年5月11日
    00
  • Java实现一个简单的定时器代码解析

    下面是Java实现一个简单的定时器的完整攻略: 1. 概述 在Java中,我们可以使用Timer和TimerTask类来实现一个简单的定时器。 2. Timer和TimerTask类 2.1 Timer类 Timer类表示一个定时器,可以用来设置定时任务。Timer类提供了以下方法: schedule(TimerTask task, long delay):…

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