上传文件时,Controller里面得不到面页表单项。。看了很多文章,但没看见有用Spring MVC的,不知道是不是Spring MVC造成的这个问题。
有碰到此类问题的给点意见
主要问题出在这里:
List fileItems = sevletFileUpload.parseRequest(request);
System.out.println("file aize =" + fileItems.size());
这里得到的fileItems的大小始终是0...不知道为什么。spring中也有multipartResolver,页面也没问题。
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="2097152"/>
</bean>jsp 页面<form:form commandName="fileUpload" method="post" action="<%=request.getContextPath() + "/uploadFormTest.html"%>" enctype="multipart/form-data" id="uploadForm">
<p><input type="button" value="增加上传按钮" onclick="addUploadButton()"/></p>
<p><form:input path="name" id="name" cssClass="text medium"/></p>
<p>
<spring:bind path="fileUpload.file">
<input type="file" name="file" id="file" class="file medium" />
</spring:bind>
</p>
<p><input type="submit" value="上传"/></p>
</form:form>
Controller代码如下...package org.chinae.webapp.action;import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.multipart.support.ByteArrayMultipartFileEditor;
import org.springframework.web.servlet.ModelAndView;public class FileUploadTestController extends BaseFormController { public FileUploadTestController() {
setCommandName("fileUpload");
setCommandClass(FileUpload.class);
} public ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, BindException errors)
throws Exception {
FileUpload fileUpload = (FileUpload) command; // 文件上傳部分
boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart == true) {
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sevletFileUpload = new ServletFileUpload(
factory);
// 设置允许用户上传文件大小,单位:字节,这里设为2m
sevletFileUpload.setSizeMax(2 * 1024 * 1024);
// 设置最多只允许在内存中存储的数据,单位:字节
factory.setSizeThreshold(4096);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
factory.setRepository(new File("d:\\upload\\temp"));
// 开始读取上传信息
List fileItems = sevletFileUpload.parseRequest(request);
System.out.println("file aize =" + fileItems.size());
// 依次处理每个上传的文件
Iterator iter = fileItems.iterator();
// 正则匹配,过滤路径取文件名
String regExp = ".+\\\\(.+)$";
// 过滤掉的文件类型
String[] errorType = { ".exe", ".com", ".cgi", ".asp" };
Pattern p = Pattern.compile(regExp);
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next(); // 忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
String name = item.getName();
long size = item.getSize();
if ((name == null || name.equals("")) && size == 0)
continue;
Matcher m = p.matcher(name);
boolean result = m.find();
if (result) {
for (int temp = 0; temp < errorType.length; temp++) {
if (m.group(1).endsWith(errorType[temp])) {
throw new IOException(name + ": 非法文件类型禁止上传");
}
}
try {
// 保存上传的文件到指定的目录
// 在下文中上传文件至数据库时,将对这里改写开始
item.write(new File(getServletContext()
.getRealPath("/upload")
+ "/" + m.group(1)));
System.out.println(name + "&nbsp;&nbsp;" + size
+ "<br>");
// 在下文中上传文件至数据库时,将对这里改写结束
} catch (Exception e) {
e.printStackTrace();
}
} else {
throw new IOException("fail to upload");
}
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (FileUploadException e) {
e.printStackTrace();
} } else {
System.out.println("the enctype must be multipart/form-data");
} // 取得服务器中已有文件的下載列表
List<String> fileListInServer = new ArrayList<String>(); File dir = new File(getServletContext().getRealPath("/upload") + "/");
String[] children = dir.list();
if (children != null) {
for (int i = 0; i < children.length; i++) {
fileListInServer.add(children[i]);
}
} request.setAttribute("downloadList", fileListInServer); return new ModelAndView("redirect:/successful.html");
} protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(byte[].class,
new ByteArrayMultipartFileEditor());
}}