JavaWeb简单文件上传流程的实战记录

JavaWeb简单文件上传实战攻略

简介

本攻略基于JavaWeb开发,帮助初学者快速入门文件上传功能。我们将介绍一个基于Servlet/JSP的简单文件上传例子,包含完整的代码示例、攻略细节和实践体验。

文件上传流程

JavaWeb文件上传可以分为以下几个步骤:

  1. 表单设计 - 创建一个包含 file type input 元素的表单,实现文件上传UI.
  2. 解析文件 - 使用Java Servlet的api,解析multipart/form-data类型的表单数据.
  3. 验证文件 - 对文件大小、类型和命名等方面进行验证,并按需对文件进行压缩加密等操作.
  4. 存储文件 - 将验证合格的文件存储为某种形式,如磁盘上的文件或数据库表格.

下面我们将通过具体的案例加深理解.

示例一

步骤一:表单设计

下面是一个基本的表单设计,适用于文件上传的例子,使用multipart/form-data编码类型:

<form method="post" action="upload.action" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="upload">
</form>

步骤二:解析文件

在Servlet中,我们使用Apache文件上传组件commons-fileupload 来完成文件上传功能。在解析时,要先判断请求的类型以及文件的大小等信息,以便判断文件是否会超过服务器的接收范围。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 文件上传处理:
    DiskFileItemFactory factory = new DiskFileItemFactory();
    // 设定文件最大上传大小
    factory.setSizeThreshold(1024 * 1024 * 10); // 10 MB
    ServletFileUpload upload = new ServletFileUpload(factory);
    upload.setSizeMax(1024 * 1024 * 50); // 50 MB

    // 解析上传文件
    try {
        List<FileItem> items = upload.parseRequest(request);
        for (FileItem item : items) {
            if (!item.isFormField()) { // 非表单数据处理
                String fileName = item.getName();
                // ...
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

步骤三:验证文件

在接收到上传文件后,我们要根据一定的规则进行对文件进行验证,以确保文件的格式和大小符合要求。以下是一个简单的文件验证实现示例:

if (item.getSize() > 1024 * 1024) { // 文件大小不得超过1MB
    System.out.println("File too big!");
    continue;
}
if (!item.getContentType().startsWith("image/")) { // 文件类型必须为图片
    System.out.println("File type error!");
    continue;
}

步骤四:存储文件

解析完成后,我们要将验证合格的文件存储为某种形式,这里我们选择将文件存储在服务器的磁盘上:

String savePath = "data";
File saveDir = new File(savePath);
if (!saveDir.exists()) {
    saveDir.mkdir();
}
String fileName = item.getName();
String filePath = savePath + File.separator + fileName;
File storeFile = new File(filePath);
item.write(storeFile);

示例二

步骤一:表单设计

下面是一个多文件上传的表单设计,使用multipart/form-data编码类型:

<form method="post" action="multiUpload.action" enctype="multipart/form-data">
    <input type="file" name="file" multiple>
    <input type="submit" value="upload">
</form>

步骤二:解析文件

在Servlet中,我们使用Apache文件上传组件commons-fileupload来完成多个文件上传功能:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 多个文件上传处理:
    DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(1024 * 1024 * 10); // 10MB
    ServletFileUpload upload = new ServletFileUpload(factory);
    upload.setSizeMax(1024 * 1024 * 50); // 50MB

    // 解析上传文件
    List<FileItem> items = upload.parseRequest(request);
    // 文件列表
    List<File> files = new ArrayList<>();
    for (FileItem item : items) {
        if (!item.isFormField()) { // 非表单数据处理
            String fileName = item.getName();
            if (fileName == null || fileName.trim().equals("")) {
                continue;
            }
            fileName = fileName.substring(fileName.lastIndexOf(File.separator) + 1);
            File storeFile = new File("data" + File.separator + fileName);
            item.write(storeFile);
            files.add(storeFile);
        }
    }
}

步骤三:验证文件

在接收到上传文件后,我们要根据一定的规则进行对文件进行验证,以确保文件的格式和大小符合要求。以下是一个简单的文件验证实现示例:

Long size = item.getSize();
String contentType = item.getContentType();
if (size > 1024 * 1024) {
    System.out.println("文件大小超出限制!");
}
if (!"image/png".equals(contentType) && !"image/jpg".equals(contentType) && !"image/jpeg".equals(contentType)) {
    System.out.println("文件类型不匹配!");
}

步骤四:存储文件

解析完成后,我们要将验证合格的文件存储为某种形式,这里我们选择将文件存储在服务器的磁盘上:

if (!file.exists()) {
    file.mkdirs();
}
for (File f : files) {
    String filePath = file.getAbsolutePath() + File.separator + f.getName();
    if (!new File(filePath).exists()) {
        f.renameTo(new File(filePath));
    } else {
        System.out.println("文件名已存在!");
    }
}

总结

JavaWeb 文件上传是一个非常常见的功能,同时上传文件的实现也体现出了 Java 服务器端编程中一些重要的技术、原理和开发思想。使用文件上传组件完成文件上传功能,可以大大提高开发效率和文件上传的安全性。

本文中的示例代码仅仅是最基础的Java文件上传实现,实际应用中还需要考虑更多的情况。比如文件上传基于 Ajax 实现时的异常处理、文件重复命名,安全性检查等问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaWeb简单文件上传流程的实战记录 - Python技术站

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

相关文章

  • springmvc+spring+mybatis实现用户登录功能(下)

    本文将详细讲解如何使用SpringMVC、Spring和MyBatis框架实现用户登录功能。本文将分为两部分,本文是第二部分,主要介绍如何使用MyBatis框架实现用户登录功能。 使用MyBatis框架实现用户登录功能 MyBatis是一种优秀的持久层框架,它可以帮助我们更加方便地操作数据库。在本节中,我们将使用MyBatis框架实现用户登录功能。 步骤一:…

    Java 2023年5月17日
    00
  • IDEA 非常重要的一些设置项(一连串的问题差点让我重新用回 Eclipse)

    下面是“IDEA 非常重要的一些设置项”的完整攻略。 1. 自动导入包的设置 开发中,我们需要使用很多的类。在使用类的时候,IDEA 会自动提示我们需要导入的包。但是,如果包的数量很多,我们可能会忘记导入某些包。 为了避免这种情况,我们可以设置 IDEA 在自动提示需要导入的包时,自动导入缺少的包。在 IDEA 的设置中,点击 Editor > Gen…

    Java 2023年5月20日
    00
  • Java对象的使用过程是什么?

    Java对象的使用过程分为以下几个步骤: 创建对象:使用new关键字创建一个对象并为其分配内存 初始化对象:为对象的属性赋初值 使用对象:调用对象的方法或属性操作对象 销毁对象:当对象不再被使用时,销毁对象并释放内存 以下是两个示例说明: 示例1: // 创建一个Person类 public class Person { private String nam…

    Java 2023年5月11日
    00
  • Jsp连接Access数据库(不通过建立ODBC数据源的方法)

    JSP连接Access数据库是一种常见的操作,但是通常需要通过建立ODBC数据源这一繁琐步骤。下面,本文将介绍一种不需要建立ODBC数据源的方法。 准备工作 在进行JSP连接Access数据库之前,需要先做一些准备工作: 确保电脑上安装了Java开发环境JDK和Tomcat服务器; 准备一个Access数据库文件,例如database.mdb; 准备两个Ja…

    Java 2023年6月15日
    00
  • maven的安装配置以及在IDEA中的配置图文教程

    让我为你详细讲解Maven的安装配置以及在IDEA中的配置图文教程吧。 1. Maven的安装配置: 1.1 下载Maven 首先,你需要从Maven 官网下载最新的稳定版本。下载完成后,解压到任何你喜欢的目录中(比如:/usr/local/maven/) 1.2 配置环境变量 编辑环境变量配置文件(/etc/profile)并添加以下内容: export …

    Java 2023年5月20日
    00
  • 解析Java编程之Synchronized锁住的对象

    下面我将详细讲解“解析Java编程之Synchronized锁住的对象”的完整攻略。 介绍 在Java编程中,使用Synchronized关键字来进行同步控制是非常常见的路线。这个关键字提供了一种简单的方法来确保在并发代码的同时,一组代码只有一个线程可以访问。Synchronized关键字的目标对象是引用变量。 应用 要在Java编程中使用Synchroni…

    Java 2023年5月26日
    00
  • 使用maven开发springboot项目时pom.xml常用配置(推荐)

    在使用Maven开发Spring Boot项目时,pom.xml文件是非常重要的配置文件。本文将详细讲解pom.xml文件中常用的配置,以及如何使用这些配置来构建Spring Boot项目。 1. 常用配置 以下是pom.xml文件中常用的配置: 1.1 项目信息 <groupId>com.example</groupId> <…

    Java 2023年5月15日
    00
  • java webApp异步上传图片实现代码

    下面是详细的java webApp异步上传图片实现代码的攻略: 一、介绍 本文将详细讲解如何在Java Web应用程序中实现异步上传图片的功能。异步上传可以提高上传的效率并提升用户体验。本文中的示例代码使用了Spring MVC框架,使用了jQuery的异步文件上传插件。 二、向项目中添加所需的库和插件 首先,需要将所需的库和插件添加到项目中。这些库包含Sp…

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