Skip to content

Commit

Permalink
change: 用TempFile的新方法重新实现Upload适配器的几个注入器
Browse files Browse the repository at this point in the history
  • Loading branch information
wendal committed Feb 5, 2016
1 parent e3e34d0 commit 8605b9a
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 68 deletions.
3 changes: 1 addition & 2 deletions src/org/nutz/mvc/adaptor/WhaleAdaptor.java
Expand Up @@ -25,9 +25,7 @@
/** /**
* 自动适配普通表单/文件上传表单/Json表单的数据 * 自动适配普通表单/文件上传表单/Json表单的数据
* *
* @since 1.r.55开始使用与servlet 3.0+一致的Part接口,原方法标记为弃用.
*/ */
@Deprecated
public class WhaleAdaptor extends PairAdaptor { public class WhaleAdaptor extends PairAdaptor {


protected static Log log = Logs.get(); protected static Log log = Logs.get();
Expand Down Expand Up @@ -56,6 +54,7 @@ public WhaleAdaptor(UploadingContext up) {
uploadCtx = up; uploadCtx = up;
} }


@SuppressWarnings("deprecation")
protected ParamInjector evalInjectorBy(Type type, Param param) { protected ParamInjector evalInjectorBy(Type type, Param param) {
// TODO 这里的实现感觉很丑, 感觉可以直接用type进行验证与传递 // TODO 这里的实现感觉很丑, 感觉可以直接用type进行验证与传递
// TODO 这里将Type的影响局限在了 github issue #30 中提到的局部范围 // TODO 这里将Type的影响局限在了 github issue #30 中提到的局部范围
Expand Down
39 changes: 39 additions & 0 deletions src/org/nutz/mvc/upload/injector/AbstractUploadInjector.java
@@ -0,0 +1,39 @@
package org.nutz.mvc.upload.injector;

import java.util.List;
import java.util.Map;

import org.nutz.mvc.adaptor.ParamInjector;
import org.nutz.mvc.upload.TempFile;

public abstract class AbstractUploadInjector implements ParamInjector {

protected String name;

public AbstractUploadInjector(String name) {
this.name = name;
}

@SuppressWarnings("unchecked")
protected TempFile getTempFile(Object refer, String name) {
if (refer == null)
return null;
Object obj = ((Map<String, Object>) refer).get(name);
if (obj == null)
return null;

// Map 中只有可能有两种值, TempFile 或者 List<TempFile>
// 如果是单一对象直接返回
if (obj instanceof TempFile) {
return (TempFile) obj;
}
// 如果是列表,则取第一项
else {
List<?> list = (List<?>) obj;
if (list.isEmpty())
return null;
else
return (TempFile) list.get(0);
}
}
}
33 changes: 6 additions & 27 deletions src/org/nutz/mvc/upload/injector/FileInjector.java
@@ -1,49 +1,28 @@
package org.nutz.mvc.upload.injector; package org.nutz.mvc.upload.injector;


import java.io.File; import java.io.File;
import java.util.List;
import java.util.Map;


import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;


import org.nutz.mvc.adaptor.ParamInjector;
import org.nutz.mvc.upload.TempFile; import org.nutz.mvc.upload.TempFile;


/** /**
* @since 1.r.55开始使用与servlet 3.0+一致的Part接口,原方法标记为弃用. * @since 1.r.55开始使用与servlet 3.0+一致的Part接口,原方法标记为弃用.
*/ */
@Deprecated @Deprecated
public class FileInjector implements ParamInjector { public class FileInjector extends AbstractUploadInjector {


public FileInjector(String name) { public FileInjector(String name) {
this.name = name; super(name);
} }


private String name;

@SuppressWarnings("unchecked")
protected File getFile(Object refer) { protected File getFile(Object refer) {
if (refer == null) TempFile tmp = getTempFile(refer, name);
return null; if (tmp == null)
Object obj = ((Map<String, Object>) refer).get(name); return null;
if (obj == null) return tmp.getFile();
return null;

// Map 中只有可能有两种值, TempFile 或者 List<TempFile>
// 如果是单一对象直接返回
if (obj instanceof TempFile) {
return ((TempFile) obj).getFile();
}
// 如果是列表,则取第一项
else {
List<?> list = (List<?>) obj;
if (list.isEmpty())
return null;
else
return ((TempFile) list.get(0)).getFile();
}
} }


public Object get( ServletContext sc, public Object get( ServletContext sc,
Expand Down
15 changes: 6 additions & 9 deletions src/org/nutz/mvc/upload/injector/FileMetaInjector.java
@@ -1,28 +1,25 @@
package org.nutz.mvc.upload.injector; package org.nutz.mvc.upload.injector;


import java.util.Map;

import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;


import org.nutz.mvc.adaptor.ParamInjector;
import org.nutz.mvc.upload.TempFile; import org.nutz.mvc.upload.TempFile;


@Deprecated @Deprecated
public class FileMetaInjector implements ParamInjector { public class FileMetaInjector extends AbstractUploadInjector {


public FileMetaInjector(String name) { public FileMetaInjector(String name) {
this.name = name; super(name);
} }


private String name;

@SuppressWarnings("unchecked")
public Object get(ServletContext sc, HttpServletRequest req, HttpServletResponse resp, Object refer) { public Object get(ServletContext sc, HttpServletRequest req, HttpServletResponse resp, Object refer) {
if (refer == null) if (refer == null)
return null; return null;
return ((TempFile) ((Map<String, Object>) refer).get(name)).getMeta(); TempFile tmp = getTempFile(refer, name);
if (tmp == null)
return null;
return tmp.getMeta();
} }


} }
19 changes: 12 additions & 7 deletions src/org/nutz/mvc/upload/injector/InputStreamInjector.java
@@ -1,29 +1,34 @@
package org.nutz.mvc.upload.injector; package org.nutz.mvc.upload.injector;


import java.io.File; import java.io.IOException;


import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;


import org.nutz.lang.Streams; import org.nutz.lang.Lang;
import org.nutz.mvc.upload.TempFile;


@Deprecated public class InputStreamInjector extends AbstractUploadInjector {
public class InputStreamInjector extends FileInjector {


public InputStreamInjector(String name) { public InputStreamInjector(String name) {
super(name); super(name);
} }


@Override
public Object get( ServletContext sc, public Object get( ServletContext sc,
HttpServletRequest req, HttpServletRequest req,
HttpServletResponse resp, HttpServletResponse resp,
Object refer) { Object refer) {
if (refer == null) if (refer == null)
return null; return null;
File f = getFile(refer); TempFile tmp = getTempFile(refer, name);
return Streams.buff(Streams.fileIn(f)); if (tmp == null)
return null;
try {
return tmp.getInputStream();
} catch (IOException e) {
throw Lang.wrapThrow(e);
}
} }


} }
22 changes: 13 additions & 9 deletions src/org/nutz/mvc/upload/injector/ReaderInjector.java
@@ -1,32 +1,36 @@
package org.nutz.mvc.upload.injector; package org.nutz.mvc.upload.injector;


import java.io.File; import java.io.IOException;
import java.io.InputStreamReader;


import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;


import org.nutz.lang.Lang;
import org.nutz.lang.Streams; import org.nutz.lang.Streams;
import org.nutz.mvc.upload.TempFile;


/** public class ReaderInjector extends AbstractUploadInjector {
* @since 1.r.55开始使用与servlet 3.0+一致的Part接口,原方法标记为弃用.
*/
@Deprecated
public class ReaderInjector extends FileInjector {


public ReaderInjector(String name) { public ReaderInjector(String name) {
super(name); super(name);
} }


@Override
public Object get( ServletContext sc, public Object get( ServletContext sc,
HttpServletRequest req, HttpServletRequest req,
HttpServletResponse resp, HttpServletResponse resp,
Object refer) { Object refer) {
if (refer == null) if (refer == null)
return null; return null;
File f = getFile(refer); TempFile tmp = getTempFile(refer, name);
return Streams.buffr(Streams.fileInr(f)); if (tmp == null)
return null;
try {
return Streams.buffr(new InputStreamReader(tmp.getInputStream()));
} catch (IOException e) {
throw Lang.wrapThrow(e);
}
} }


} }
17 changes: 3 additions & 14 deletions src/org/nutz/mvc/upload/injector/TempFileInjector.java
@@ -1,30 +1,19 @@
package org.nutz.mvc.upload.injector; package org.nutz.mvc.upload.injector;


import java.util.Map;

import javax.servlet.ServletContext; import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;


import org.nutz.mvc.adaptor.ParamInjector;
import org.nutz.mvc.upload.TempFile; import org.nutz.mvc.upload.TempFile;


public class TempFileInjector implements ParamInjector { public class TempFileInjector extends AbstractUploadInjector {


public TempFileInjector(String name) { public TempFileInjector(String name) {
this.name = name; super(name);
} }


private String name;

@SuppressWarnings("unchecked")
public TempFile get(ServletContext sc, HttpServletRequest req, HttpServletResponse resp, Object refer) { public TempFile get(ServletContext sc, HttpServletRequest req, HttpServletResponse resp, Object refer) {
if (refer == null) return getTempFile(refer, name);
return null;
Object tmp = ((Map<String, Object>) refer).get(name);
if (tmp != null && tmp instanceof TempFile)
return (TempFile)tmp;
return null;
} }


} }

0 comments on commit 8605b9a

Please sign in to comment.