java 文件上传(单文件与多文件)

好的。对于Java文件上传,常见的方式有单文件上传和多文件上传两种。

一、单文件上传

1.前端通过表单实现文件选择和提交操作,后端利用Apache的FileUpload组件进行接收处理。

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

2.后端利用FileUpload组件进行接收处理,解析出文件流并保存。

public String upload(HttpServletRequest request) throws IOException, ServletException {
    // 创建一个处理工厂
    DiskFileItemFactory factory = new DiskFileItemFactory();
    // 设置缓冲区大小
    factory.setSizeThreshold(1024 * 1024 * 10);
    // 创建文件上传解析器
    ServletFileUpload upload = new ServletFileUpload(factory);
    // 设置上传的文件最大值
    upload.setSizeMax(1024 * 1024 * 50);
    // 解析request请求
    List<FileItem> items = upload.parseRequest(request);
    // 文件名
    String fileName = null;
    // 文件内容
    InputStream is = null;
    for (FileItem item : items) {
        // 判断是否是上传文件
        if (!item.isFormField()) {
            // 文件名
            fileName = item.getName();
            // 文件内容
            is = item.getInputStream();
            break;
        }
    }
    // 将文件内容写入磁盘
    FileOutputStream fos = new FileOutputStream(new File("fileDir", fileName));
    byte[] buffer = new byte[1024];
    int len;
    while ((len = is.read(buffer)) != -1) {
        fos.write(buffer, 0, len);
    }
    fos.close();
    is.close();
    return "success";
}

二、多文件上传

1.前端通过表单实现文件选择和提交操作,注意表单中的file input需要添加multiple属性。

<form action="upload" enctype="multipart/form-data" method="post">
    <input type="file" name="files" multiple><br>
    <input type="submit" value="上传">
</form>

2.后端利用FileUpload组件进行接收处理,解析出文件流并保存。

public String upload(HttpServletRequest request) throws IOException, ServletException {
    // 创建一个处理工厂
    DiskFileItemFactory factory = new DiskFileItemFactory();
    // 设置缓冲区大小
    factory.setSizeThreshold(1024 * 1024 * 10);
    // 创建文件上传解析器
    ServletFileUpload upload = new ServletFileUpload(factory);
    // 设置上传的文件最大值
    upload.setSizeMax(1024 * 1024 * 50);
    // 解析request请求
    List<FileItem> items = upload.parseRequest(request);
    // 文件名
    List<String> fileNames = new ArrayList<>();
    // 文件内容
    List<InputStream> iss = new ArrayList<>();
    for (FileItem item : items) {
        // 判断是否是上传文件
        if (!item.isFormField()) {
            // 文件名
            fileNames.add(item.getName());
            // 文件内容
            iss.add(item.getInputStream());
        }
    }
    // 将文件内容写入磁盘
    for (int i=0; i<fileNames.size(); i++) {
        FileOutputStream fos = new FileOutputStream(new File("fileDir", fileNames.get(i)));
        byte[] buffer = new byte[1024];
        int len;
        while ((len = iss.get(i).read(buffer)) != -1) {
            fos.write(buffer, 0, len);
        }
        fos.close();
        iss.get(i).close();
    }
    return "success";
}

以上是Java实现文件上传的完整攻略。需要注意的是,关于文件上传需要考虑的问题还有很多,例如文件类型、文件大小、并发、服务器负载等,需要根据实际需求和实际情况进行灵活处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 文件上传(单文件与多文件) - Python技术站

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

相关文章

  • spring boot实现软删除的示例代码

    下面是Spring Boot实现软删除的完整攻略: 1. 理解软删除 首先需要了解软删除的概念和作用。软删除指的是不是真正删除数据,而是在数据库中新增一个状态字段,用于标记该数据是否被删除。这样可以保留数据完整性,同时又不会真正删除数据,方便数据恢复。 2. 实现示例1 我们以一个简单的用户信息管理为例进行讲解。首先创建一个用户实体类,包含id、用户名、密码…

    Java 2023年5月19日
    00
  • Java反射机制详解_动力节点Java学院整理

    Java反射机制详解 什么是反射机制? Java反射机制是Java语言提供的一种能够在运行时获取自身信息以及动态操作对象的能力。通过反射机制,可以在程序运行期间操作Java对象的属性、方法、构造函数等。 反射机制的重要概念 Class类 Class类是Java反射机制的核心类,每个类都有一个对应的Class实例。Class类的实例包括方法、字段,构造函数等信…

    Java 2023年5月26日
    00
  • 关于在Java中使用预定义类

    在Java中,预定义类是指Java标准库中提前定义好的一组类,它们负责完成一些常见的任务,例如字符串操作、时间日期处理等。使用Java预定义类可以大大简化编程过程,提高代码的可读性和可维护性。下面是在Java中使用预定义类的攻略: 1. 导入预定义类 Java标准库中的预定义类已经被编译成Java API文档,可以直接使用。但是,在使用预定义类之前,需要导入…

    Java 2023年5月26日
    00
  • J2SE基础之命令行中编写第一个 Hello World

    下面是 J2SE 命令行编写 Hello World 的完整攻略,包括示例说明。 准备工作 在开始之前,我们需要先安装 JDK 并将其配置好环境变量。如果您还没有安装,可以前往 Oracle 官网 下载安装包进行安装。 安装完成后,需要配置环境变量,将 JDK 的 bin 目录添加到系统的 PATH 环境变量里。 创建项目和代码文件 接下来,我们需要在本地创…

    Java 2023年5月23日
    00
  • Java实现五子棋AI算法

    Java实现五子棋AI算法完整攻略 简介 五子棋是中国传统的一款棋类游戏,游戏规则简单易懂,但是能够考验玩家的智慧和战略。在实现五子棋AI算法的过程中,涉及到很多算法和技术,如极大极小值算法、启发式搜索、Alpha-Beta剪枝等等。下面将介绍如何使用Java实现五子棋AI算法。 实现过程 1. 棋盘的表示 首先需要定义棋盘的表示。一般使用二维数组来表示棋盘…

    Java 2023年5月19日
    00
  • spring boot 结合jsp案例详解

    下面我来详细讲解“Spring Boot 结合 JSP 案例详解”的完整攻略。 一、什么是 Spring Boot 结合 JSP Spring Boot 是一个快速构建 Spring 应用程序的工具。它可以减少 Spring 应用程序开发的时间和努力,因为它提供了各种默认配置,可以轻松地开始使用 Spring 应用程序的开发。 JSP(JavaServer …

    Java 2023年6月15日
    00
  • 你应该知道的这些Mybatis-Plus使用技巧(小结)

    你应该知道的这些Mybatis-Plus使用技巧(小结) Mybatis-Plus是一个Mybatis的增强工具,拓展了Mybatis的功能,使得开发者在编写数据库CRUD操作时更加方便和快捷。本文将介绍一些Mybatis-Plus的使用技巧。 1. 自动生成代码 Mybatis-Plus提供了一种快速生成Mapper、实体类、Service、Service…

    Java 2023年5月20日
    00
  • MyBatis如何使用(一)

    先来简化一下这个任务,明确一下要求: 讲解MyBatis的使用方式 给出至少两个使用示例 以下是一个标准的Markdown文本,包含了需要的标题、代码块和示例。 MyBatis的使用方式 MyBatis 是一种 ORM 框架,它可以将 Java 类映射到数据库表,并提供了一组 API 用于执行 SQL 语句。 环境准备 首先,需要在项目中添加以下依赖: &l…

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