在许多应用场景中,如网盘、论坛等,都需要实现文件上传与下载功能。本案例基于 Java Servlet 技术实现这一功能。

功能需求是用户能够选择本地文件上传到服务器指定目录;上传成功后,服务器返回文件的相关信息,如文件名、大小等;同时,用户可以通过链接下载已上传的文件。

实现时,首先创建一个 Java Web 项目,在web.xml中配置 Servlet。编写UploadServlet处理文件上传请求,使用 Apache Commons FileUpload 库解析 HTTP 请求中的文件数据,将文件保存到服务器指定路径,关键代码如下:

TypeScript

取消自动换行复制

import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

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.util.List;

@WebServlet("/upload")

public class UploadServlet extends HttpServlet {

private static final String UPLOAD_DIRECTORY = "uploads";

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

boolean isMultipart = ServletFileUpload.isMultipartContent(request);

if (isMultipart) {

DiskFileItemFactory factory = new DiskFileItemFactory();

ServletFileUpload upload = new ServletFileUpload(factory);

try {

List<FileItem> items = upload.parseRequest(request);

for (FileItem item : items) {

if (!item.isFormField()) {

String fileName = new File(item.getName()).getName();

String filePath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY + File.separator + fileName;

File file = new File(filePath);

item.write(file);

response.getWriter().println("File uploaded successfully: " + fileName);

}

}

} catch (FileUploadException | Exception e) {

response.getWriter().println("Error uploading file: " + e.getMessage());

}

} else {

response.getWriter().println("Not a valid file upload request");

}

}

}


对于文件下载,编写DownloadServlet,读取服务器上的文件并将其作为响应流发送给客户端。在前端页面使用 HTML 的<input type="file">标签实现文件选择,通过<a>标签的href属性指定下载链接。

该功能广泛应用于内容管理系统、在线文档处理等场景,方便用户与服务器进行文件交互。