📜  在Servlet中将文件上传到服务器的示例(1)

📅  最后修改于: 2023-12-03 15:23:27.586000             🧑  作者: Mango

在Servlet中将文件上传到服务器的示例

在Web开发过程中,文件上传是非常常见的功能,本文将介绍如何在Servlet中将文件上传到服务器。

HTML表单

首先,我们要建立一个包含文件上传功能的HTML表单,表单的enctype属性需要设置为”multipart/form-data”,并且要有一个name属性为”file”的文件上传控件。

<form action="UploadServlet" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="Upload">
</form>
Servlet代码

接下来是处理上传文件的Servlet代码,我们需要通过request.getPart()方法获取上传的文件,然后使用IO流保存到服务器的指定位置。

@WebServlet("/UploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取上传的文件
        Part part = request.getPart("file");

        // 文件保存路径
        String savePath = request.getServletContext().getRealPath("/upload/");

        // 创建目录
        File file = new File(savePath);
        if (!file.exists()) {
            file.mkdirs();
        }

        // 获取文件名
        String fileName = part.getSubmittedFileName();

        // 保存文件
        part.write(savePath + fileName);
    }
}
解释说明
  • @MultipartConfig注解是为了支持文件上传,必须加上。
  • 使用request.getPart()方法来获取上传的文件,参数是表单中文件控件的name属性。
  • getServletContext().getRealPath()方法可以获取服务器的绝对路径,然后我们只需要在该路径上新建一个/upload目录作为我们保存上传文件的目录。
  • 由于文件名可能重复,我们需要使用时间戳或者UUID等方式给上传的文件重命名。
  • part.write()方法将文件保存到指定路径。
总结

在Servlet中将文件上传到服务器可以通过request.getPart()方法来获取上传的文件和Part对象,然后将Part对象保存到服务器即可。上传文件时需要注意文件保存的路径和文件名是否重复等问题。