在 Java 中实现文件上传有多种方式,下面将介绍两种常见的文件上传方式:使用 Servlet 和使用 Spring 框架。首先,我们来看如何使用 Servlet 来实现文件上传。
步骤流程:
以下是一个使用 Servlet 的文件上传示例:
依赖坐标: 无需任何额外的依赖。
Servlet 代码示例:
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet("/uploadServlet")
@MultipartConfig(
fileSizeThreshold = 1024 * 1024 * 2, // 2MB临时文件
maxFileSize = 1024 * 1024 * 10, // 10MB最大文件大小
maxRequestSize = 1024 * 1024 * 50) // 50MB最大请求大小
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上传的文件
Part filePart = request.getPart("file");
// 获取文件名
String fileName = getFileName(filePart);
// 指定文件保存目录
String savePath = "path/to/your/upload/directory/" + fileName;
// 将文件保存到服务器
filePart.write(savePath);
// 可以根据需要进行后续处理
}
// 从Part中提取文件名
private String getFileName(Part part) {
String contentDisposition = part.getHeader("content-disposition");
String[] tokens = contentDisposition.split(";");
for (String token : tokens) {
if (token.trim().startsWith("filename")) {
return token.substring(token.indexOf('=') + 1).trim().replace("\"", "");
}
}
return "";
}
}
HTML 表单示例:
<!DOCTYPE html>
<html>
<head>
<title>文件上传示例</title>
</head>
<body>
<form action="uploadServlet" method="post" enctype="multipart/form-data">
选择文件: <input type="file" name="file"><br>
<input type="submit" value="上传文件">
</form>
</body>
</html>
步骤流程:
MultipartFile
对象来处理上传的文件,并将其保存到服务器上的指定目录。以下是一个使用 Spring 框架的文件上传示例:
依赖坐标(Maven):
<dependencies>
<!-- Spring Web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.10.RELEASE</version>
</dependency>
<!-- Spring Web MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.10.RELEASE</version>
</dependency>
</dependencies>
Spring Controller 示例:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@Controller
public class FileUploadController {
private static String UPLOAD_DIR = "path/to/your/upload/directory/";
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) {
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
Path path = Paths.get(UPLOAD_DIR + file.getOriginalFilename());
Files.write(path, bytes);
redirectAttributes.addFlashAttribute("message", "文件上传成功: " + file.getOriginalFilename());
} catch (IOException e) {
e.printStackTrace();
redirectAttributes.addFlashAttribute("message", "文件上传失败: " + file.getOriginalFilename());
}
} else {
redirectAttributes.addFlashAttribute("message", "请选择要上传的文件.");
}
return "redirect:/uploadForm";
}
}
HTML 表单示例:
<!DOCTYPE html>
<html>
<head>
<title>文件上传示例</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
选择文件: <input type="file" name="file"><br>
<input type="submit" value="上传文件">
</form>
</body>
</html>
请确保替换示例中的文件保存路径(UPLOAD_DIR)为您服务器上实际的路径。这两种方法都可以实现文件上传,选择哪种取决于您的项目需求和技术栈。如果使用 Spring 框架,您需要添加 Spring 的相关依赖,并配置 Spring MVC。如果使用 Servlet,没有额外的依赖。