在Java的Servlet中,文件上传通常涉及到处理multipart/form-data类型的HTTP请求。以下是一个简单的Servlet文件上传的示例:
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;

@WebServlet("/FileUploadServlet")
public class FileUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        // 获取文件部件
        Part filePart = request.getPart("file");

        // 获取上传文件的输入流
        InputStream fileContent = filePart.getInputStream();

        // 获取上传文件的文件名
        String fileName = getSubmittedFileName(filePart);

        // 指定上传文件的保存目录
        String uploadDirectory = "path/to/upload/directory/";

        // 将上传的文件保存到服务器
        Path filePath = Path.of(uploadDirectory, fileName);
        Files.copy(fileContent, filePath, StandardCopyOption.REPLACE_EXISTING);

        response.getWriter().println("File " + fileName + " has been uploaded successfully.");
    }

    // 获取上传文件的文件名
    private String getSubmittedFileName(Part part) {
        for (String cd : part.getHeader("content-disposition").split(";")) {
            if (cd.trim().startsWith("filename")) {
                String fileName = cd.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
                return fileName.substring(fileName.lastIndexOf('/') + 1)
                        .substring(fileName.lastIndexOf('\\') + 1);
            }
        }
        return null;
    }
}

在上述示例中:

1. doPost方法处理POST请求,其中包含文件上传。
2. 通过request.getPart("file")获取文件部件。
3. 获取上传文件的输入流,并获取上传文件的文件名。
4. 指定保存上传文件的目录,然后使用Files.copy方法将文件保存到服务器。
5. 最后,向客户端发送一个简单的响应,表示文件上传成功。

确保在实际应用中进行适当的错误处理、文件大小限制、安全性和文件类型验证等操作。此外,根据实际需求,可能需要使用第三方库或框架简化文件上传处理。


转载请注明出处:http://www.pingtaimeng.com/article/detail/6884/Servlet