java实现文件上传到服务器

yizhihongxing

下面我来详细讲解Java实现文件上传到服务器的完整攻略。首先,我们需要了解两种上传文件的方式:使用Servlet API和使用第三方库。

使用Servlet API

使用Servlet API实现文件上传需要依赖于HttpServletRequest和Part对象。具体步骤如下:

1. 在html页面中添加文件上传表单

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

2. 在Servlet中获取上传的文件

// 获取文件
Part filePart = request.getPart("file");
String fileName = filePart.getSubmittedFileName();
InputStream inputStream = filePart.getInputStream();

// 将文件上传到服务器
// 此处可以根据需要自定义上传路径和文件名
String uploadPath = "/path/to/upload/dir/" + fileName;
Files.copy(inputStream, Paths.get(uploadPath), StandardCopyOption.REPLACE_EXISTING);

示例

@WebServlet(name = "FileUploadServlet", urlPatterns = {"/upload"})
@MultipartConfig // 必须添加该注解
public class FileUploadServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Part filePart = request.getPart("file");
        String fileName = filePart.getSubmittedFileName();
        InputStream inputStream = filePart.getInputStream();

        String uploadPath = "/path/to/upload/dir/" + fileName;
        Files.copy(inputStream, Paths.get(uploadPath), StandardCopyOption.REPLACE_EXISTING);

        response.getWriter().println("文件上传成功!");
    }
}

使用第三方库

除了使用Servlet API,还可以使用第三方库来实现文件上传。这里介绍一下常用的两个库:Apache Commons FileUpload和Spring MVC。

Apache Commons FileUpload

Apache Commons FileUpload是一个流行的文件上传库,使用起来非常方便。具体步骤如下:

1. 添加依赖

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

2. 在Servlet中解析上传的文件

// 创建文件上传工厂
DiskFileItemFactory factory = new DiskFileItemFactory();

// 创建文件上传处理器
ServletFileUpload fileUpload = new ServletFileUpload(factory);

// 解析上传的文件
List<FileItem> fileItemList = fileUpload.parseRequest(request);

// 保存文件
for (FileItem fileItem : fileItemList) {
    if (!fileItem.isFormField()) {
        String fileName = fileItem.getName();
        InputStream inputStream = fileItem.getInputStream();

        String uploadPath = "/path/to/upload/dir/" + fileName;
        Files.copy(inputStream, Paths.get(uploadPath), StandardCopyOption.REPLACE_EXISTING);
    }
}

示例

@WebServlet(name = "FileUploadServlet", urlPatterns = {"/upload"})
public class FileUploadServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload fileUpload = new ServletFileUpload(factory);

        try {
            List<FileItem> fileItemList = fileUpload.parseRequest(request);

            for (FileItem fileItem : fileItemList) {
                if (!fileItem.isFormField()) {
                    String fileName = fileItem.getName();
                    InputStream inputStream = fileItem.getInputStream();

                    String uploadPath = "/path/to/upload/dir/" + fileName;
                    Files.copy(inputStream, Paths.get(uploadPath), StandardCopyOption.REPLACE_EXISTING);
                }
            }

            response.getWriter().println("文件上传成功!");
        } catch (FileUploadException e) {
            e.printStackTrace();
        }
    }
}

Spring MVC

Spring MVC是一个流行的Java Web框架,它也提供了文件上传的功能。具体步骤如下:

1. 添加依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.3.10</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.10</version>
</dependency>

2. 配置文件上传处理器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10485760"/> <!-- 最大文件大小,单位是字节,默认为1MB -->
</bean>

3. 在Controller中处理文件上传

@RequestMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
    String fileName = file.getOriginalFilename();
    InputStream inputStream = file.getInputStream();

    String uploadPath = "/path/to/upload/dir/" + fileName;
    Files.copy(inputStream, Paths.get(uploadPath), StandardCopyOption.REPLACE_EXISTING);

    return "上传成功!";
}

示例

@Controller
public class FileUploadController {

    @RequestMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();
        InputStream inputStream = file.getInputStream();

        String uploadPath = "/path/to/upload/dir/" + fileName;
        Files.copy(inputStream, Paths.get(uploadPath), StandardCopyOption.REPLACE_EXISTING);

        return "上传成功!";
    }
}

至此,Java实现文件上传到服务器的攻略已完整讲解完毕。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现文件上传到服务器 - Python技术站

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

相关文章

  • Linux系统设置开机自动运行脚本的方法实例

    一、Linux开机自动运行脚本的方法 在Linux系统中,我们可以通过编写脚本,实现系统开机自动运行一些指定的程序、服务等。以下是实现Linux开机自动运行脚本的方法: 将脚本文件复制到/etc/init.d/目录下,并加上可执行权限。例如,假设我们有一个脚本文件 test.sh,那么我们可以通过以下命令将其复制到 init.d 目录下: sudo cp t…

    database 2023年5月22日
    00
  • mysql常用函数汇总(分享)

    现在我来详细讲解“MySQL常用函数汇总(分享)”的完整攻略。 1. 文章介绍 本文主要介绍MySQL常用函数的使用方法和示例,适用于初学者和进阶开发者。包括数值函数、日期和时间函数、字符串函数、聚合函数等。读者可以根据自己的实际情况选择并掌握其中的一些函数,以提高开发效率和数据处理能力。 2. 数值函数 2.1 ABS函数 ABS函数返回参数的绝对值。语法…

    database 2023年5月22日
    00
  • 嵌套子查询、关联子查询和连接操作的区别

    嵌套子查询、关联子查询和连接操作都是SQL中常用的查询方式,它们分别适用于不同的场景,具体区别如下: 嵌套子查询 嵌套子查询是将一个查询语句嵌套到另外一个语句中,内部的查询语句先执行,然后将返回的结果作为外部查询语句的条件。嵌套子查询通常会出现在WHERE和FROM子句中。 下面是一个嵌套子查询的例子,查询学生表中成绩大于80分的学生信息: SELECT *…

    database 2023年3月27日
    00
  • centOs6.9服务器版本安装图解(包含java和mysql)

    CentOS6.9 服务器版本安装图解(包含 Java 和 MySQL) 这是一篇关于在 CentOS 6.9 系统上安装 Java 和 MySQL 的完整攻略。我们会提供详细的图解和具体的操作步骤,帮助你轻松完成安装。 安装 Java 环境要求 在开始安装 Java 之前,请确保已经满足以下环境要求: 一台运行 CentOS 6.9 的服务器 具有管理员权…

    database 2023年5月22日
    00
  • MySQL系列详解五: xtrabackup实现完全备份及增量备份详解-技术流ken

      xtrabackup简介   xtrabackup是一个用来对mysql做备份的工具,它可以对innodb引擎的数据库做热备。xtrabackup备份和还原速度快,备份操作不会中断正在执行的事务,备份完成之后可以自动做校验,备份结果可以压缩(节省磁盘和带宽)。实际工作中可以用来做mysql的完全备份,增量备份,以及差异备份等。 xtrabackup有两个…

    MySQL 2023年4月13日
    00
  • mysql 设置默认的时间值

    若想在MySQL的表中,为某个datetime类型的字段设置默认值,可以通过以下两种方式实现。 方式一:使用默认值函数 在MySQL中,可以使用now()函数获取当前系统时间,并将其作为该字段的默认值,步骤如下: 创建表时,在定义datetime类型字段时,使用default关键字指定now()函数作为默认值,示例代码如下: CREATE TABLE my_…

    database 2023年5月22日
    00
  • 为什么MySQL 使用timestamp可以无视时区问题.

    为什么MySQL使用timestamp可以无视时区问题? 在MySQL中,使用timestamp类型进行日期和时间的存储,它是一种与时区无关的数据类型。无论你是哪个时区,时间都会以相同的方式存储在timestamp类型字段中。下面分为以下几个方面进行讲解。 timestamp存储的时间是UTC(协调世界时) 如下面的代码块所示,我们可以使用NOW()函数获取…

    database 2023年5月22日
    00
  • CentOS MySQL 5.7编译安装步骤详细说明

    以下是CentOS MySQL 5.7编译安装的详细步骤: 1. 下载MySQL安装包 去MySQL官方网站,选择下载MySQL 5.7版本的源码压缩包(tar.gz格式),例如:mysql-5.7.33.tar.gz 2. 安装编译工具和依赖库 使用以下命令安装编译器、自动化构建工具和MySQL编译所需的依赖库: yum install -y wget m…

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