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日

相关文章

  • java使用命令行打包JAR

    下面是详细讲解Java使用命令行打包JAR的完整攻略: 一、JAR文件的概念 JAR(Java ARchive)文件是Java平台的标准打包文件,用于将多个类文件、资源文件以及META-INF目录打包为一个文件,方便程序的分发和部署。 二、使用命令行打包JAR的步骤 以下是使用命令行打包JAR的具体步骤: 创建一个目录,将需要打包的文件复制到该目录下。 打开…

    Java 2023年5月26日
    00
  • java 避免出现NullPointerException(空指针)的方法总结

    Java 避免出现 NullPointerException 的方法总结 在使用 Java 编程的过程中,我们经常会遇到空指针异常(NullPointerException),这是一种非常常见的运行时异常。下面我们来总结一下如何有效地避免空指针异常。 1. 使用 Optional 类型 Java 8 引入了 Optional 类型,可以有效地避免空指针异常。…

    Java 2023年5月27日
    00
  • Java遍历Map对象的四种方式

    下面我将为你详细讲解Java遍历Map对象的四种方式。 1. 使用Iterator遍历Map 使用Iterator遍历Map需要先通过Map的entrySet()方法获取entrySet,然后获取iterator进行遍历。示例代码如下: Map<String, Object> map = new HashMap<>(); map.pu…

    Java 2023年5月26日
    00
  • 详解Spring与Mybatis整合方法(基于IDEA中的Maven整合)

    下面是详解Spring与Mybatis整合方法(基于IDEA中的Maven整合)的完整攻略,该过程中包含了2个示例: 1. 环境准备 在进行整合之前,需要先准备好以下环境:- JDK- Maven- IDEA- Spring- Mybatis 在这里由于要使用Maven来管理依赖,所以需要找到一个可以正常运行的Maven仓库,可以使用阿里云镜像或者是Mave…

    Java 2023年5月19日
    00
  • java实现银行管理系统

    Java实现银行管理系统攻略 1. 系统需求分析 在进行银行管理系统的开发前,我们需要对系统的需求进行分析。一般来说,银行管理系统需要包含以下功能模块: 用户管理:包括客户注册、登录、修改个人信息等功能。 账户管理:包括账户开户、查询余额、转账、存取款等功能。 交易管理:包括交易流水记录、账户冻结与解冻等功能。 系统管理:包括管理员登录、账号管理、数据备份等…

    Java 2023年5月19日
    00
  • Spring与Spring boot的区别介绍

    Spring与Spring Boot是Java开发中广泛使用的两个框架,两者之间有明显的区别。本篇攻略将介绍Spring和Spring Boot的区别,以及为何可能会选择使用Spring Boot。 Spring与Spring Boot的区别 Spring框架 Spring框架是一个广泛使用的框架,有以下几点特点: 宽泛的适用范围:Spring框架可以应用于…

    Java 2023年5月15日
    00
  • 解析Hibernate + MySQL中文乱码问题

    解析Hibernate + MySQL中文乱码问题的攻略如下: 问题描述 在Hibernate+MySQL环境下,中文字符在数据库中存储后出现乱码。该问题可能出现在在Hibernate实体(Entity)属性中,或者是从数据库中读取的字符串。 原因分析 中文乱码问题通常是因为字符集(Charset)不一致导致的。在Hibernate和MySQL中,字符集需要…

    Java 2023年5月20日
    00
  • mybatis中的count()按条件查询方式

    Mybatis是一个流行的Java ORM框架,它可以方便的操作数据库。在Mybatis中,我们可以使用count()函数按条件查询数据的总数。本文将详细讨论如何使用mybatis中的count()函数进行条件查询。 Mybatis中的count()函数 在Mybatis中,我们可以通过xml文件或注解方式来编写sql语句。下面给出一个xml文件的示例,其中…

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