在struts2下使用common-fileupload上传的时候,HttpServletRequest
请求被转成了MultiPartRequestWrapper,导致upload.parseRequest(request)为空。
使用过的方法:1.增加一个filter,在struts的过滤器之前设置MultiPartRequestWrapper
。http://auzll.iteye.com/blog/919981
2.设置struts配置。
http://topic.csdn.net/u/20090514/10/ba62c761-e591-4c9e-859a-87907634ea13.html
Struts2的配置文件加上如下内容:
<constant name="struts.multipart.maxSize" value="1152921504606846970006" />
<constant name="struts.i18n.encoding" value="UTF-8" />
<constant name="struts.multipart.saveDir" value="/tmp" />
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.devMode" value="false" />
<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest"
name="myRequestParser" class="com.cn.RequestParseWrapper"
scope="default" optional="true" />
<constant name="struts.multipart.handler" value="myRequestParser" />
标红的这里你要写一个类,这个类的代码哪下所示:
public class RequestParseWrapper extends JakartaMultiPartRequest {
public void parse(HttpServletRequest servletRequest, String saveDir)throws IOException
{
}
}
虽然这个类什么也没有,但是必须得有。
这样就可以解决 List items = upload.parseRequest(request);它为空的问题了。
servlet中代码
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
upload.setSizeMax(500*1024*1024);//文件上传大小
try {
List items = upload.parseRequest(request);
Iterator itr = items.iterator();
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
if (item.isFormField()) {
System.out.println("表单参数名:" + item.getFieldName()
+ ",表单参数值:" + item.getString("UTF-8"));
if("pid".equals(item.getFieldName()))
pid =item.getString("UTF-8").toString();
if("caName".equals(item.getFieldName()))
{
caName = URLDecoder.decode(item.getString("UTF-8").toString(),"utf-8");
}
if("address".equals(item.getFieldName()))
{
address =URLDecoder.decode(item.getString("UTF-8").toString(),"utf-8");
}
if("caX".equals(item.getFieldName()))
caX =item.getString("UTF-8").toString();
if("caY".equals(item.getFieldName()))
caY =item.getString("UTF-8").toString();
if("doPerson".equals(item.getFieldName()))
doPerson =item.getString("UTF-8").toString();
if(StringUtils.isBlank(pid))
{
clCaInfoSql.setRegistrant(doPerson);
clCaInfoSql.setRegiTime(new Date());
}else
{
// clCaInfoSql.setPid(pid);
clCaInfoSql.setUpdatePerson(doPerson);
clCaInfoSql.setUpdateTime(new Date());
}
clCaInfoSql.setIsdel("0");
if(StringUtils.isNotBlank(address))
{
clCaInfoSql.setAddress(address);
}
if(StringUtils.isNotBlank(caName))
{
clCaInfoSql.setCaName(caName);
}
if(StringUtils.isNotBlank(caX))
{
clCaInfoSql.setCaX(Double.parseDouble(caX));
}
if(StringUtils.isNotBlank(caY))
{
clCaInfoSql.setCaY(Double.parseDouble(caY));
}
} else {
if (item.getName() != null && !item.getName().equals("")) {
String suffix = item.getName().substring(
item.getName().lastIndexOf("."));// 文件后缀名
String namebefore = item.getName().substring(0, item.getName().indexOf("."));
String pdfStr = this.getClass().getClassLoader().getResource("/") .getPath();
String basrUrl = pdfStr.substring(1,pdfStr.indexOf("/WEB-INF/classes"));//获取项目路径
String fileUrl = basrUrl+"\\"+ "image"+"\\";//当前要储存的pdf路径
//String imagePath =msgManagerponms.getMessage("image.path");//上传文件的保存路径
File file1 = new File(fileUrl);
if(!file1.exists())
file1.mkdirs();
//得到当前时间
// SimpleDateFormat sdFormat = new SimpleDateFormat("yyyyMMddhhmmssSSS");
// String myTime = sdFormat.format(new Date());
File file = new File(fileUrl, namebefore +suffix);// 文件保存的路径
item.write(file);
clCaInfoSql.setPic(namebefore +suffix);
} else {
System.out.println("选择上传文件");
request.setAttribute("upload.message", "没有选择上传文件!");
}
}
}