diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java index d58811f9a26..70dcc7b8109 100644 --- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java +++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java @@ -159,7 +159,11 @@ public class MultiPartFilter implements Filter { request.setAttribute(mp.getName(),mp.getFile()); if (mp.getContentDispositionFilename() != null) + { params.add(mp.getName(), mp.getContentDispositionFilename()); + if (mp.getContentType() != null) + params.add(mp.getName()+CONTENT_TYPE_SUFFIX, mp.getContentType()); + } if (_deleteFiles) { mp.getFile().deleteOnExit(); @@ -178,6 +182,8 @@ public class MultiPartFilter implements Filter ByteArrayOutputStream bytes = new ByteArrayOutputStream(); IO.copy(p.getInputStream(), bytes); params.add(p.getName(), bytes.toByteArray()); + if (p.getContentType() != null) + params.add(p.getName()+CONTENT_TYPE_SUFFIX, p.getContentType()); } } } diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java index 97d948a97dd..fad0306325e 100644 --- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java +++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java @@ -47,7 +47,19 @@ public class MultipartFilterTest private ServletTester tester; - + public static class TestServlet extends DumpServlet + { + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException + { + assertNotNull(req.getParameter("fileup")); + assertNotNull(req.getParameter("fileup"+MultiPartFilter.CONTENT_TYPE_SUFFIX)); + assertEquals(req.getParameter("fileup"+MultiPartFilter.CONTENT_TYPE_SUFFIX), "application/octet-stream"); + super.doPost(req, resp); + } + + } @@ -63,7 +75,7 @@ public class MultipartFilterTest tester=new ServletTester(); tester.setContextPath("/context"); tester.setResourceBase(_dir.getCanonicalPath()); - tester.addServlet(DumpServlet.class, "/"); + tester.addServlet(TestServlet.class, "/"); tester.setAttribute("javax.servlet.context.tempdir", _dir); FilterHolder multipartFilter = tester.addFilter(MultiPartFilter.class,"/*", EnumSet.of(DispatcherType.REQUEST)); multipartFilter.setInitParameter("deleteFiles", "true"); @@ -253,7 +265,6 @@ public class MultipartFilterTest protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { assertEquals("How now brown cow.", req.getParameterMap().get("strupContent-Type:")); - super.doPost(req, resp); }