java - 在 Servlet 3.0 中以编程方式访问 MultiPartConfig

标签 java jakarta-ee multipartform-data servlet-3.0

我使用 Servlet 3 @MultiPartConfig 注释在我的应用程序中实现文件上传。我需要在运行时设置 multipart-config 位置参数(不是在注释参数中硬编码)。是否有任何 API 可用于以编程方式访问 servlet 的 multipart-config?

谢谢

最佳答案

@MultiPartConfig 实际上只是容器的标记接口(interface)。当 servlet 被初始化时,提供的注解值通过代理对象映射到它。当传入请求是 multipart/form-data 时,上传的部分被映射到请求,容器根据注释的值和请求的部分执行必要的工作。您无法拦截此过程,因为这一切都发生在容器内部。但是,还有一种选择。它需要第二次执行文件系统操作。由于您拥有所有部分,您可以重建文件并将其“重新上传”到您选择的位置。它可能看起来像下面的方法。请记住,尽管我在自己的 servlet 中快速测试了它以演示概念,但它显然不是完成的代码:

@Override
protected void doPost(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
        throws ServletException, IOException {

    httpServletResponse.setContentType("text/html");
    PrintWriter printWriter = httpServletResponse.getWriter();

    InputStream inputStream;
    FileOutputStream fileOutputStream;

    for (Part part : httpServletRequest.getParts()) {

        inputStream = httpServletRequest.getPart(part.getName()).getInputStream();
        int i = inputStream.available();
        byte[] b = new byte[i];
        inputStream.read(b);
        String fileName = "";

        for (String temp : part.getHeader("content-disposition").split(";")) {
            if (temp.trim().startsWith("filename")) {
                fileName = temp.substring(temp.indexOf('=') + 1).trim().replace("\"", "");
            }
        }

        String uploadDir = "/temp";
        fileOutputStream = new FileOutputStream(uploadDir + "/" + fileName);
        fileOutputStream.write(b);
        inputStream.close();
        fileOutputStream.close();

        printWriter.write("Uploaded file " + uploadDir + "/" + fileName + ".");
    }
}

关于java - 在 Servlet 3.0 中以编程方式访问 MultiPartConfig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14044793/

相关文章:

java - 通用接口(interface)实现不起作用

java - ORM建模: Database first vs classes first

java - Java中如何在一行中输入多个字符串

java - 部署时错误(java.lang.NoClassDefFoundError : com/sun/net/ssl/internal/ssl/Provider ) in Jboss 7

java - Spring 休息 : upload file

java - 服务器中止与 android 应用程序的连接 : An established connection was aborted by the software in your host machine

java - Spring Security 自定义过滤器

eclipse - 在 eclipse 中设置 Spring 和 Tomcat?

javascript - 如何在 Javascript 中获取表单字段 (formData) 的图像大小

java - 来自 JSP 表单的输入 TYPE TEXT 值(enctype ="multipart/form-data")返回 null