1.文件上传关键代码:
[color=red]DiskFileItemFactory fac = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fac);
upload.setHeaderEncoding("utf-8");
@SuppressWarnings("rawtypes")
List fileList = null;
try {
fileList = upload.parseRequest(request);
} catch (FileUploadException ex) {
ex.printStackTrace() ;
}[/color]
这里的request对象是初始时HttpServletRequest的对象。刚开始认为fileList对象不会为空,但是却空。主要原因在于我配置的spring MVC的文件解析器如下:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760" />
</bean>
关键之处在于CommonsMultipartResolver中的方法parseRequest已经解析过request对象了。方法如下:
[img]http://dl2.iteye.com/upload/attachment/0107/5906/c9a6e830-d5e0-36e9-b4e7-f577a830d449.jpg[/img]
2.问题解决:
(1).可以把上面的spring MVC文件解析器注释掉,解析就不为空了。个人建议不要这样做,因为注释之后图片就不能上传了。
(2).配置自定义的文件解析器就可以了。我是这样配置的如下:
[color=red]<bean id="multipartResolver" class="sh.xz.dbutil.MyMultipartResolver">
<property name="excludeUrls">
<list>
<value>/company/add</value>
</list>
</property>
<property name="maxUploadSize" value="10485760" />
</bean>[/color]
value路径是需要文件的controler路径。
[color=red]public class MyMultipartResolver extends CommonsMultipartResolver{
private List<String> excludeUrls;
public void setExcludeUrls(List<String> excludeUrls) {
this.excludeUrls = excludeUrls;
}
public List<String> getExcludeUrls() {
return excludeUrls;
}[/color]
[color=red] @Override
public boolean isMultipart(HttpServletRequest request) {
for (String url: excludeUrls) {
if (request.getRequestURI().contains(url)) {
return super.isMultipart(request);
}
}
return false;
}
}[/color]
这样既可以上传的文件可以得到你想要的值,也可以上传图片。
[color=red]DiskFileItemFactory fac = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fac);
upload.setHeaderEncoding("utf-8");
@SuppressWarnings("rawtypes")
List fileList = null;
try {
fileList = upload.parseRequest(request);
} catch (FileUploadException ex) {
ex.printStackTrace() ;
}[/color]
这里的request对象是初始时HttpServletRequest的对象。刚开始认为fileList对象不会为空,但是却空。主要原因在于我配置的spring MVC的文件解析器如下:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760" />
</bean>
关键之处在于CommonsMultipartResolver中的方法parseRequest已经解析过request对象了。方法如下:
[img]http://dl2.iteye.com/upload/attachment/0107/5906/c9a6e830-d5e0-36e9-b4e7-f577a830d449.jpg[/img]
2.问题解决:
(1).可以把上面的spring MVC文件解析器注释掉,解析就不为空了。个人建议不要这样做,因为注释之后图片就不能上传了。
(2).配置自定义的文件解析器就可以了。我是这样配置的如下:
[color=red]<bean id="multipartResolver" class="sh.xz.dbutil.MyMultipartResolver">
<property name="excludeUrls">
<list>
<value>/company/add</value>
</list>
</property>
<property name="maxUploadSize" value="10485760" />
</bean>[/color]
value路径是需要文件的controler路径。
[color=red]public class MyMultipartResolver extends CommonsMultipartResolver{
private List<String> excludeUrls;
public void setExcludeUrls(List<String> excludeUrls) {
this.excludeUrls = excludeUrls;
}
public List<String> getExcludeUrls() {
return excludeUrls;
}[/color]
[color=red] @Override
public boolean isMultipart(HttpServletRequest request) {
for (String url: excludeUrls) {
if (request.getRequestURI().contains(url)) {
return super.isMultipart(request);
}
}
return false;
}
}[/color]
这样既可以上传的文件可以得到你想要的值,也可以上传图片。