package goddie.sns.util;import java.io.File;
import java.util.Iterator;
import java.util.List;import javax.servlet.http.HttpServletRequest;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;public class FileUpload { @SuppressWarnings("unchecked")
public static String faceUpload(HttpServletRequest request) { DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(5000);
factory.setRepository(new File(request.getContextPath() + "\\tmp"));

ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(500 * 1000); try {
if (!ServletFileUpload.isMultipartContent(request)) {
return null;
}

List<FileItem> items = upload.parseRequest(request);
Iterator<FileItem> iter = items.iterator();
while (iter.hasNext()) { FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
File uploadedFile = new File(request.getContextPath()
+ "\\1\\abc" + item.getContentType());
try {
item.write(uploadedFile);
return item.getName();
} catch (Exception e) { e.printStackTrace();
}
}
} } catch (FileUploadException e) { e.printStackTrace();
} return null; }
}

解决方案 »

  1.   

    谢谢楼上关注,表单随便做了一个:
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <%@page import="goddie.sns.util.FileUpload"%>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <%
    if (request != null) { out.print(FileUpload.faceUpload(request));
    }

    %><body>
    <form name="form1" action="testUpload.jsp" method="POST"
    enctype="multipart/form-data"><input id="facepic" name="facepic" type="file"> <input
    type="submit"></form>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <%@page import="goddie.sns.util.FileUpload"%>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <%
    if (request != null) { out.print(FileUpload.faceUpload(request));
    }

    %><body>
    <form name="form1" action="testUpload.jsp" method="POST"
    enctype="multipart/form-data"><input id="facepic" name="facepic" type="file"> <input
    type="submit"></form>
    </body>
    </html>
      

  2.   

    刚看到一个相关QA:struts识别multipart的request,并且自动解析,struts已经处理请求,并且放置在FormBean中,再解析request会返回null。如果我需要在action中自己解析multipart的请求,配置action-mapping不关联formbean(更好的方法是替换默认的Multipart Handler,参见Struts相关的文档。)
      

  3.   

    呵呵! 我没看到你调用struts的迹象!
    action="testUpload.jsp"如果返回 null,应该有异常吧
      

  4.   

    我也是同样的问题,也是action=“xx/xx/xxx.jsp”读取出来也是null,求解