在JSP(JavaServer Pages)中实现文件上传通常需要使用Servlet来处理。以下是一个简单的JSP和Servlet的示例,演示文件上传功能。

1. 文件上传表单(upload.jsp):
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
    <form action="FileUploadServlet" method="post" enctype="multipart/form-data">
        选择文件: <input type="file" name="file" /><br/>
        <input type="submit" value="上传" />
    </form>
</body>
</html>

2. 处理文件上传的Servlet(FileUploadServlet.java):
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
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;

@WebServlet("/FileUploadServlet")
@MultipartConfig(fileSizeThreshold = 1024 * 1024, // 1 MB
                 maxFileSize = 1024 * 1024 * 5,      // 5 MB
                 maxRequestSize = 1024 * 1024 * 5 * 5) // 25 MB
public class FileUploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        // 获取上传文件的保存路径
        String savePath = getServletContext().getRealPath("/") + "uploads";
        File fileSaveDir = new File(savePath);
        if (!fileSaveDir.exists()) {
            fileSaveDir.mkdir();
        }

        PrintWriter out = response.getWriter();
        try {
            // 处理文件上传
            for (Part part : request.getParts()) {
                String fileName = extractFileName(part);
                part.write(savePath + File.separator + fileName);
            }

            out.println("<h3>文件上传成功</h3>");
        } catch (Exception e) {
            out.println("<h3>文件上传失败</h3>");
            out.println("<p>" + e.getMessage() + "</p>");
        } finally {
            out.close();
        }
    }

    private String extractFileName(Part part) {
        String contentDisp = part.getHeader("content-disposition");
        String[] items = contentDisp.split(";");
        for (String s : items) {
            if (s.trim().startsWith("filename")) {
                return s.substring(s.indexOf("=") + 2, s.length() - 1);
            }
        }
        return "";
    }
}

在上述例子中,文件将被保存到服务器上的 "uploads" 目录中。确保你的服务器有写入权限,并且你可能需要根据实际需求修改文件的保存路径和大小限制。


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