//批量上传图片 SWFupload
public String UploadImgExecute()throws Exception{
//String msg = "err";
HttpServletRequest request = ServletActionContext.getRequest();
//定义磁盘工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置内存缓冲区,超过后写入临时文件
factory.setSizeThreshold(10240000);
// 设置临时文件存储位置
String base = "d:/upload/bin";
//request.gets
File file = new File(base);
if(!file.exists())
file.mkdirs();
factory.setRepository(file);
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置单个文件的最大上传值
upload.setFileSizeMax(10002400000l);
// 设置整个request的最大值
upload.setSizeMax(10002400000l);
upload.setHeaderEncoding("UTF-8");

try {
List items = upload.parseRequest(request);
FileItem item = null;
String fileName = null;

Iterator iter = items.iterator();    while (iter.hasNext()) {  
        item = (FileItem) iter.next(); 
        //上传文件 
        if (!item.isFormField()) { 
         
         File uploadedFile = new File(base + File.separator + item.getName());  
             item.write(uploadedFile);  
           
        }
        }
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

解决方案 »

  1.   

    在上传的过程中,当代码运行到List items = upload.parseRequest(request)这里时,发现items为空,检查程序后,没有问题,最后再网上看了一下原来是把web.xml中的<filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        </filter>    <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>改成<filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        </filter>    <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>*.action</url-pattern>
        </filter-mapping>问题就解决了
      

  2.   

    难道是被过滤器过滤了File,好像不可能吧,为什么有的是正常的呢?
      

  3.   

    上传页面的form里加上enctype="multipart/form-data"看看
      

  4.   

    问题怎么解决,我把以上讲的都验证了,还是list.size()=0!!!!!!!!!!
    急!!!!
      

  5.   

    被 Fielter过滤了吧,在web.xml中将fielter注释掉就行了
    <!-- 
    <filter>
    <filter-name>struts2</filter-name>
    <filter-class>
    org.apache.struts2.dispatcher.FilterDispatcher
    </filter-class>
    </filter>
    <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping> <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    -->

      <servlet>
        <servlet-name>UploadServlet</servlet-name>
        <servlet-class>com.chen.servlet.UploadServlet</servlet-class>
      </servlet>  <servlet-mapping>
        <servlet-name>UploadServlet</servlet-name>
        <url-pattern>/UploadServlet</url-pattern>
      </servlet-mapping>
    <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
      

  6.   

    去掉
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
      

  7.   

    一样的问题,求解决办法,还有一个问题request在哪定义的?我的是struts2
      

  8.   

    上传其实就是前台文件信息传到后台,List items = upload.parseRequest(request)这里时,发现items为空,从下面几个方面入手:一是前台没传过来,现在可以想到是上传页面的form里加上enctype="multipart/form-data",还有提交action路径正确。二是后台有错,List items = upload.parseRequest(request)得不到值,那说明request有错或者是upload有错,你调试以下看看究竟是哪个有问题,看你的代码是没错,只有调试才能看出问题来。如果以上都没错,那就用struts2的特点
    后台定义private File[] uploadFile;
     private String[] uploadFileFileName;
    然后set get。前台对应:<s:file name="uploadFile"></s:file>这样也能上传。换一种思维