📅  最后修改于: 2023-12-03 15:34:56.764000             🧑  作者: Mango
Servlet是Java Web开发中的一种重要技术,可以用于处理客户端发送的请求和返回响应数据。本文将介绍如何使用Servlet实现文件上传功能。
首先,我们需要在页面中加入一个文件上传表单,如下所示:
<form action="uploadServlet" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传文件">
</form>
注意,表单的enctype
属性必须设置为multipart/form-data
。否则,文件上传功能将无法实现。
接下来,处理上传请求的Servlet代码如下:
@WebServlet("/uploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part filePart = request.getPart("file");
InputStream fileContent = filePart.getInputStream();
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();
// 处理文件上传逻辑
}
}
代码解释:
@WebServlet
注解设置Servlet URL映射地址。本例中,上传文件表单的action属性为“uploadServlet”,因此在代码中添加该注解,并将参数设置为“/uploadServlet”。@MultipartConfig
注解告诉Servlet容器这个Servlet是用来处理multipart请求的(即包含文件上传的请求)。这个注解指定最大允许上传文件大小和允许上传的文件类型。request.getPart
方法获取输入流,从而读取文件内容。Part.getSubmittedFileName()
方法获取,需要使用java.nio.file.Paths
解析文件名。最后,将上传的文件保存到指定位置。
try (OutputStream out = new FileOutputStream(new File("/path/to/save/" + fileName))) {
int read;
final byte[] bytes = new byte[1024];
while ((read = fileContent.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
}
代码解释:
java.io.FileOutputStream
保存文件。注意,这里需要指定保存的文件路径和文件名。完整的Servlet代码如下所示:
@WebServlet("/uploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part filePart = request.getPart("file");
InputStream fileContent = filePart.getInputStream();
String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString();
try (OutputStream out = new FileOutputStream(new File("/path/to/save/" + fileName))) {
int read;
final byte[] bytes = new byte[1024];
while ((read = fileContent.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
}
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer = response.getWriter();
writer.append("<html><head></head><body>");
writer.append("<p>文件已上传至 /path/to/save/" + fileName + "</p>");
writer.append("</body></html>");
}
}
本文介绍了如何使用Servlet实现文件上传,包括前端页面、Servlet处理文件上传请求、文件保存和完整代码示例。希望对您有所帮助。