答答问 > 投稿 > 正文
掌握Servlet轻松实现文件上传下载,告别繁琐操作!

作者:用户DTQJ 更新时间:2025-06-09 03:34:08 阅读时间: 2分钟

引言

在Web开发中,文件上传下载是常见的需求。使用Servlet技术,我们可以轻松实现这一功能,无需依赖第三方库。本文将详细介绍如何使用Servlet进行文件上传下载,帮助开发者告别繁琐操作。

文件上传

1. 准备工作

首先,确保你的项目中已经包含了Servlet API。如果是Maven项目,可以在pom.xml中添加以下依赖:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

2. 编写上传页面

创建一个HTML页面,包含一个表单用于上传文件。表单的enctype属性设置为multipart/form-data,确保文件能够以二进制形式上传。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
    <form action="UploadServlet" method="post" enctype="multipart/form-data">
        <input type="file" name="file" />
        <input type="submit" value="上传" />
    </form>
</body>
</html>

3. 编写UploadServlet

创建一个继承自HttpServlet的类,重写doPost方法处理文件上传请求。

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

@WebServlet("/UploadServlet")
public class UploadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取上传文件的输入流
        InputStream inputStream = request.getPart("file").getInputStream();
        // 设置上传文件的保存路径
        String uploadPath = getServletContext().getRealPath("/") + "uploads/";
        File uploadDir = new File(uploadPath);
        if (!uploadDir.exists()) {
            uploadDir.mkdirs();
        }
        // 获取上传文件的文件名
        String fileName = request.getPart("file").getSubmittedFileName();
        // 创建上传文件的输出流
        File file = new File(uploadPath + fileName);
        java.io.OutputStream outputStream = new java.io.FileOutputStream(file);
        // 读取输入流,写入输出流
        byte[] buffer = new byte[1024];
        int len;
        while ((len = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, len);
        }
        // 关闭流
        outputStream.close();
        inputStream.close();
        // 返回上传成功信息
        response.getWriter().write("文件上传成功!");
    }
}

4. 配置web.xml

在web.xml中配置UploadServlet。

<web-app>
    <servlet>
        <servlet-name>UploadServlet</servlet-name>
        <servlet-class>UploadServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>UploadServlet</servlet-name>
        <url-pattern>/UploadServlet</url-pattern>
    </servlet-mapping>
</web-app>

文件下载

1. 编写下载页面

创建一个HTML页面,包含一个表单用于选择下载文件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件下载</title>
</head>
<body>
    <form action="DownloadServlet" method="post">
        <input type="text" name="filename" placeholder="请输入文件名" />
        <input type="submit" value="下载" />
    </form>
</body>
</html>

2. 编写DownloadServlet

创建一个继承自HttpServlet的类,重写doPost方法处理文件下载请求。

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

@WebServlet("/DownloadServlet")
public class DownloadServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取下载文件的文件名
        String fileName = request.getParameter("filename");
        // 设置下载文件的保存路径
        String downloadPath = getServletContext().getRealPath("/") + "uploads/";
        File file = new File(downloadPath + fileName);
        // 设置响应头
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
        // 获取下载文件的输出流
        ServletOutputStream outputStream = response.getOutputStream();
        // 读取下载文件的输入流,写入输出流
        FileInputStream fileInputStream = new FileInputStream(file);
        byte[] buffer = new byte[1024];
        int len;
        while ((len = fileInputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, len);
        }
        // 关闭流
        outputStream.close();
        fileInputStream.close();
    }
}

3. 配置web.xml

在web.xml中配置DownloadServlet。

<web-app>
    <servlet>
        <servlet-name>DownloadServlet</servlet-name>
        <servlet-class>DownloadServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DownloadServlet</servlet-name>
        <url-pattern>/DownloadServlet</url-pattern>
    </servlet-mapping>
</web-app>

总结

通过本文的介绍,相信你已经掌握了使用Servlet进行文件上传下载的方法。在实际开发中,你可以根据需求进行扩展和优化,例如添加文件大小限制、文件类型限制等。希望本文能帮助你轻松实现文件上传下载功能。

大家都在看
发布时间:2024-12-12 02:19
那个经海二路那里的真的是个骗局,先要交190体检费,然后还要交30元照片费,还有工资没那么高,条件也很差,属于黑中介。
发布时间:2024-11-01 21:31
孕妇糖尿病在日常生活中也是属于比较常见的一种疾病,而孕期糖尿病分为两种,妊娠前期以及妊娠后期,一般情况下妊娠后期患有糖尿病对胎儿的影响非常大,容易导致胚胎出。
发布时间:2024-10-31 12:45
1、最快的办法是找最近的汽车修理店,他们有搭电的工具,出点服务费请他们来帮忙搭电,启动车辆后自行决定是要换电瓶还是先开开看能否充满电接着用。2、换电瓶,要根据你的电瓶使用时间来决定,比如你的车才买了一两年,显然电瓶寿命还长,没电是因为。