掌握Servlet輕鬆實現文件上傳下載,告別繁瑣操作!

提問者:用戶DTQJ 發布時間: 2025-06-08 02:37:48 閱讀時間: 3分鐘

最佳答案

引言

在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停止文件上傳下載的方法。在現實開辟中,你可能根據須要停止擴大年夜跟優化,比方增加文件大小限制、文件範例限制等。盼望本文能幫助你輕鬆實現文件上傳下載功能。

相關推薦