在 Java Servlet 中实现文件上传的步骤如下:
- 创建一个 HTML 表单,其中包含一个文件上传控件。
- 创建一个 Servlet 来处理上传请求。
在 Servlet 中获取上传的文件,并将文件内容保存到服务器的磁盘上。
下面是一个示例代码,其中我们假设要上传的文件类型为 image/jpeg,文件保存在 /path/to/file/directory 目录下,且上传的表单中包含一个名为 file 的文件上传控件。
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
@WebServlet("/upload")
@MultipartConfig(
fileSizeThreshold = 1024 * 1024,
maxFileSize = 1024 * 1024 * 5,
maxRequestSize = 1024 * 1024 * 5 * 5
)
public class UploadServlet extends HttpServlet {
private static final String FILE_DIRECTORY = "/path/to/file/directory";
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上传的文件对象
Part filePart = request.getPart("file");
// 获取上传的文件名
String fileName = getSubmittedFileName(filePart);
// 将上传的文件保存到服务器磁盘上
OutputStream outputStream = new FileOutputStream(new File(FILE_DIRECTORY, fileName));
InputStream inputStream = filePart.getInputStream();
byte[] buffer = new byte[1024];
int bytesRead = -1;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
outputStream.close();
inputStream.close();
response.getWriter().println("File " + fileName + " uploaded successfully.");
}
private String getSubmittedFileName(Part part) {
String header = part.getHeader("content-disposition");
for (String token : header.split(";")) {
if (token.trim().startsWith("filename")) {
return token.substring(token.indexOf("=") + 2, token.length() - 1);
}
}
return null;
}
}
上面的代码中,我们首先使用 @MultipartConfig 注解来配置文件上传限制,包括文件大小阈值、最大文件大小和最大请求大小等。然后,我们在 doPost() 方法中获取上传的文件对象,并获取上传的文件名。其中,我们使用 getSubmittedFileName() 方法来解析文件名。
接着,我们使用 FileOutputStream 打开文件输出流,然后通过 getInputStream() 方法获取文件输入流。我们定义一个字节数组作为缓冲区,每次从文件输入流中读取 1024 个字节并写入输出流中。当文件输入流读取完毕后,我们关闭输入流和输出流,完成文件上传。
最后,我们向客户端浏览器输出上传成功的消息。
评论 (0)