From bdde20a6b4ddd187fbfec81254b7553b9d458657 Mon Sep 17 00:00:00 2001 From: wendal chen Date: Mon, 28 Nov 2016 16:01:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8A=BD=E5=8F=96WhaleFilter=E7=9A=84?= =?UTF-8?q?=E5=85=B3=E4=BA=8E=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E7=9A=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/org/nutz/mvc/WhaleFilter.java | 82 ++++++++++++++------- src/org/nutz/mvc/view/AbstractPathView.java | 3 +- 2 files changed, 57 insertions(+), 28 deletions(-) diff --git a/src/org/nutz/mvc/WhaleFilter.java b/src/org/nutz/mvc/WhaleFilter.java index 6ab0deb73..bb4ad708e 100644 --- a/src/org/nutz/mvc/WhaleFilter.java +++ b/src/org/nutz/mvc/WhaleFilter.java @@ -5,9 +5,13 @@ import java.io.InputStream; import java.io.StringReader; import java.nio.charset.Charset; +import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; +import java.util.Iterator; +import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Properties; import javax.servlet.Filter; @@ -22,11 +26,14 @@ import javax.servlet.http.HttpServletResponse; import org.nutz.filepool.UU32FilePool; +import org.nutz.lang.Each; +import org.nutz.lang.Lang; import org.nutz.lang.Mirror; import org.nutz.lang.util.NutMap; import org.nutz.log.LogAdapter; import org.nutz.log.Logs; import org.nutz.mvc.upload.FastUploading; +import org.nutz.mvc.upload.TempFile; import org.nutz.mvc.upload.UploadException; import org.nutz.mvc.upload.UploadingContext; @@ -102,7 +109,6 @@ public void init(InputStream ins) throws Exception { } } - @SuppressWarnings("unchecked") @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { @@ -143,32 +149,7 @@ public String getMethod() { String contentType = req.getContentType(); if (contentType != null) { if (uc != null && contentType.contains("multipart/form-data")) { - FastUploading fup = new FastUploading(); - try { - final Map params = fup.parse(req, (UploadingContext) uc); - params.putAll(req.getParameterMap()); - request = new HttpServletRequestWrapper(req) { - public String getParameter(String name) { - return (String) params.get(name); - } - @SuppressWarnings("rawtypes") - public Map getParameterMap() { - return params; - } - @SuppressWarnings("rawtypes") - public Enumeration getParameterNames() { - return Collections.enumeration(params.keySet()); - } - public String[] getParameterValues(String name) { - if (params.containsKey(name)) - return new String[]{(String) params.get(name)}; - return null; - } - }; - } - catch (UploadException e) { - throw new ServletException("upload fail", e); - } + request = handleUpload(req); } } } @@ -177,4 +158,51 @@ public String[] getParameterValues(String name) { } public void destroy() {} + + @SuppressWarnings("unchecked") + public HttpServletRequest handleUpload(HttpServletRequest req) throws ServletException { + try { + FastUploading fup = new FastUploading(); + final Map params = fup.parse(req, (UploadingContext) uc); + final List files = new ArrayList(); + Iterator> it = params.entrySet().iterator(); + while (it.hasNext()) { + Object obj = it.next().getValue(); + final boolean[] re = new boolean[1]; + Lang.each(obj, new Each() { + public void invoke(int index, Object ele, int length){ + if (ele != null && ele instanceof TempFile) { + files.add((TempFile) ele); + re[0] = true; + } + } + }); + if (re[0]) + it.remove(); + } + req.setAttribute("_files", files); + params.putAll(req.getParameterMap()); + return new HttpServletRequestWrapper(req) { + public String getParameter(String name) { + return (String) params.get(name); + } + @SuppressWarnings("rawtypes") + public Map getParameterMap() { + return params; + } + @SuppressWarnings("rawtypes") + public Enumeration getParameterNames() { + return Collections.enumeration(params.keySet()); + } + public String[] getParameterValues(String name) { + if (params.containsKey(name)) + return new String[]{(String) params.get(name)}; + return null; + } + }; + } + catch (UploadException e) { + throw new ServletException("upload fail", e); + } + } } diff --git a/src/org/nutz/mvc/view/AbstractPathView.java b/src/org/nutz/mvc/view/AbstractPathView.java index 49625d558..eaf53a1b5 100644 --- a/src/org/nutz/mvc/view/AbstractPathView.java +++ b/src/org/nutz/mvc/view/AbstractPathView.java @@ -1,5 +1,6 @@ package org.nutz.mvc.view; +import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; @@ -102,7 +103,7 @@ public static Context createContext(HttpServletRequest req, Object obj) { } // 请求的参数表,需要兼容之前的p.参数, Fix issue 418 Map p = new HashMap(); - for (Object o : req.getParameterMap().keySet()) { + for (Object o : Lang.enum2collection(req.getParameterNames(), new ArrayList())) { String key = (String) o; String value = req.getParameter(key); p.put(key, value);