使用 MultipartConfig 的 Java Servlet

标签 java servlets file-upload

我正在使用一个包罗万象的 servlet,并将请求对象传递给其他内部框架类。它是我的应用程序的设计方式。原因超出了这个问题的范围。

@WebServlet(name="RequestHandler", urlPatterns="/*")

我正在尝试使用 multipart-form-data 从浏览器上传文件:

<form action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="submit" name="videoUpload" value="Upload"/>
</form>

真正将文件数据传递到服务器的唯一方法是用以下方式注释 servlet:

@MultipartConfig

如果我注释我的 catch-all servlet,一切正常,但我实际上并不经常需要使用文件上传功能。

选项 1:别管它。 即使大多数请求不使用它,保留注释是否会导致不必要的开销?

选项 2:以编程方式添加它? 如果检测到 multipart 的表单类型,是否可以通过编程方式添加注释?

选项 3:在别处使用注释。 在单独的类中使用注释怎么样(我假设它需要在实际创建请求对象之前出现...)?

最佳答案

如果你不添加'@MultipartConfig'注释就可以了。您可以通过编程方式确定内容是否为多部分:

 String form_field="";
 FileItem fileItem = null; 
 if (ServletFileUpload.isMultipartContent(request)) {
            ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
            try {
                fileItemsList = servletFileUpload.parseRequest(request);
            } catch (FileUploadException ex) {
                out.print(ex);
            }
            String optionalFileName = "";
            Iterator it = fileItemsList.iterator();
            while (it.hasNext()) {
                FileItem fileItemTemp = (FileItem) it.next();
                if (fileItemTemp.isFormField()) {
                    if (fileItemTemp.getFieldName().equals("form_field")) {
                        form_field = fileItemTemp.getString();
                    }
                } else {
                    if (fileItemTemp.getFieldName().equals("file")) {
                        fileItem = fileItemTemp;
                    }
                }
            }
        }

如果 ServletFileUpload.isMultipartContent(request) 为 false,那么您可以通过 request.getParameter 以一般方式检索表单参数。我用过apache file upload在这个例子中。

关于使用 MultipartConfig 的 Java Servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19473663/

相关文章:

java - @WebServlet 带有来自 xml 的初始化参数

Spring MVC - 找不到上下文文件

flutter - 如何在 Flutter 中将图像和文件上传到服务器?

java - 如何接收文件并将其发送到不同的服务器

java - 如何计算 openGL 4.5 中锥面的法线?

java - 为什么 Maven 找不到我的自定义 Mojo?

Java 8 日期时间格式化程序行为不端

java - 根据主机名加载 Bean

java - Tomcat + Mysql - 无法找到 java :comp

python - 如何使用 Python 请求模块上传一堆文件