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 参数校验的具体实现方式的完整攻略: 第一步:引入依赖 在 pom.xml 中引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validat…

    Java 2023年5月20日
    00
  • JavaScript中的其他对象

    JavaScript中的其他对象是指除了基本数据类型(如数字、字符串、布尔值、null、undefined)和数组之外的所有对象。这些对象包括函数、日期、正则表达式、数学和全局对象等。本文将详细讲解这些其他对象的用法及示例。 函数对象 函数对象是JavaScript中的一等公民,可以当作变量被传递、赋值或作为函数的参数和返回值。函数对象有以下几种定义方式: …

    Java 2023年5月30日
    00
  • @RequestBody时第二个字母大写,映射不到的解决

    使用Spring MVC时,通常可以使用@RequestBody注解来接收HTTP请求的JSON数据,并将请求体转换为Java对象。但在实际使用过程中,有时会遇到使用@RequestBody时第二个字母大写时,映射不到的问题。这是因为Spring MVC默认情况下使用的是Jackson库来进行JSON转换,而Jackson库的命名策略默认是采用小写字母和下划…

    Java 2023年5月26日
    00
  • springboot的四种启动方式

    下面是关于Spring Boot的四种启动方式的详细攻略: 1. 命令行启动方式 在命令行中直接输入”java -jar”命令启动Spring Boot应用。在执行该命令时需要指定Jar包路径,例如: java -jar springboot-demo.jar 如果应用需要指定参数,可以在命令行中传入。 2. Maven插件启动方式 使用Spring Boo…

    Java 2023年5月15日
    00
  • Android ListView自定义Adapter实现仿QQ界面

    下面是详细讲解“Android ListView自定义Adapter实现仿QQ界面”的完整攻略。 简介 在Android开发中,ListView是常见的视图控件之一,用来展示一系列的元素。而自定义Adapter可以让我们更加灵活地设置ListView中的每一个Item的布局和内容。本文将介绍如何使用自定义Adapter,实现具有聊天界面中消息气泡特效的QQ界…

    Java 2023年5月23日
    00
  • SpringBoot如何使用Fastjson解析Json数据

    下面是SpringBoot使用Fastjson解析Json数据的攻略,包含以下几个部分: 添加Fastjson的依赖 编写用于解析Json数据的代码 示例 添加Fastjson的依赖 首先需要在项目的pom.xml文件中添加Fastjson的依赖,可以在官方网站中查看最新版本并添加如下代码: <dependency> <groupId&gt…

    Java 2023年5月26日
    00
  • Java图书管理系统课程设计

    Java图书管理系统课程设计攻略 一、需求分析 在进行Java图书管理系统课程设计之前,需要对系统需求进行分析和明确。在这个阶段,需要考虑的问题包括: 系统的主要功能模块,如图书信息录入、查询、借阅、归还等等。 系统的用户管理模块,包括管理员和普通用户的不同权限和功能。 系统的数据存储模块,需要设计数据库表结构和关键数据处理逻辑等。 二、设计数据库 根据需求…

    Java 2023年5月24日
    00
  • Sping Security前后端分离两种实战方案

    下面我将详细讲解“Spring Security前后端分离两种实战方案”的完整攻略。 简介 Spring Security 是一款开源的认证和授权框架,可以实现对系统的安全性保护。在前后端分离的架构中,Spring Security 的实现需要特别注意。本文将从两个方面介绍 Spring Security 的前后端分离实现方案。 方案一:基于 Token 的…

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