当我在使用struts的一个上传例子的时候,发生了一个很奇怪的错误!
 当上传小文件的时候没有问题,但当大文件的时候,就会直接在 if(file==null)
{
return mapping.findForward("uploadFileSuccess");

}
这里跳转。
请各位帮忙!谢谢,请大家看看有什么更好的办法上传大的文件吗?UploadFileAction.java 
/*
 * Generated by MyEclipse Struts
 * Template path: templates/java/JavaClass.vtl
 */
package com.yemaoqing.struts.action;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.upload.FormFile;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;import com.yemaoqing.struts.form.UploadFileForm;
import java.io.*;
import basic.BasicParameter;
import file.UploadFile;;
public class UploadFileAction extends Action {
/*
 * Generated Methods
 */ /**
 * Method execute
 * 
 * @param mapping
 * @param form
 * @param request
 * @param response
 * @return ActionForward
 */
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) 
{
ActionMessages errors=new ActionMessages();
try
{

HttpServletRequestWrapper hs=new HttpServletRequestWrapper(request);
HttpSession session=hs.getSession();

UploadFile uf=new UploadFile();
String path=session.getAttribute("path").toString();



UploadFileForm uff=(UploadFileForm)form;
FormFile file = uff.getFile();


if(file==null)
{
return mapping.findForward("uploadFileSuccess");

}
String fname=file.getFileName();

fname=fname.replace(" ","");

String size=Integer.toString(file.getFileSize())+"bytes"; InputStream streamIn=file.getInputStream();
OutputStream streamOut=new FileOutputStream(path+File.separator+fname);

int bytesRead=0;
byte[] buffer=new byte[BasicParameter.defaultBuffer];
while((bytesRead=streamIn.read(buffer,0,BasicParameter.defaultBuffer))!=-1)
{
streamOut.write(buffer,0,bytesRead);

}

streamOut.close();
streamIn.close();

uff.setFname(fname);
uff.setSize(size);

file.destroy();


return (mapping.findForward("uploadFileSuccess"));
}
catch(Exception e)
{
e.printStackTrace();
errors.add("uploadFail",new ActionMessage("error.loginFail"));
saveErrors(request,errors);
return (mapping.getInputForward());
}


}
}

解决方案 »

  1.   

    这是Form
    /*
     * Generated by MyEclipse Struts
     * Template path: templates/java/JavaClass.vtl
     */
    package com.yemaoqing.struts.form;import ......public class UploadFileForm extends ActionForm {
    /*
     * Generated fields
     */ /** path property */
    private String path; /** uploadPath property */
    private FormFile file;

    public ActionErrors validate(ActionMapping mapping,
    HttpServletRequest request) {
    ActionErrors errors=new ActionErrors();



    /*
    HttpServletRequestWrapper hs=new HttpServletRequestWrapper(request);
    HttpSession session=hs.getSession();
    String path=session.getAttribute("path").toString();
    if((path==null)||(path.length()<1))
    {

    errors.add("path", new ActionMessage("error.error"));

    }


    String uploadPath=session.getAttribute("uploadPath").toString();
    if((uploadPath==null)||(uploadPath.equals("")))
    {
    errors.add("uploadFilePath",new ActionMessage("error.error"));

    }
    */这里是uploadFile.jsp
    <%@page contentType="text/html;charset=gb2312"%>
    <%@ page language="java"pageEncoding="gb2312"%>
    <%@taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <jsp:directive.page import="basic.BasicParameter"/>
    <%

    String uri = request.getRequestURI();
    %>
    <%

    String path;
    if (request.getParameter("path") == null
    || request.getParameter("path").toString().trim() == "")
        {
    path = "";

    else 
    { path = request.getParameter("path").toString().trim();
    }
       session.setAttribute("path",path);
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>

    <body bgcolor=<%=BasicParameter.defaultPageColour %>>
    <body> <iframe src="../head.jsp" height="42%" width="100%" frameborder="0"></iframe>

     <html:errors/> 
     如果您选择的上传文件过大,请耐心等待!
    <div align="center" >
     <html:form action="/FileOperations/uploadFile.do"  enctype="multipart/form-data" >
      <table width="420" border="1">
                   <tr>
                     <td width="100%">请选择需要上传的文件:</td>
                     <td width="100%"> <html:file property="file" /></td>
                   </tr>
               </table>
                 <br>
                   <html:submit>提交</html:submit>
                   <html:reset>重置</html:reset>
                  
                           
              </html:form>
             
        </div>
    </body>
    </html> return errors;
    }
    public void reset(ActionMapping mapping, HttpServletRequest request) {
    // TODO Auto-generated method stub
    }
    public String getPath() {
    return path;
    }
    public void setPath(String path) {
    this.path = path;
    }
    public FormFile getFile() {
    return file;
    }
    public void setFile(FormFile file) 
    {

    this.file = file;
    }

    private String fname;
    public String getFname()
    {
    return this.fname;

    }
    public void setFname(String fname)
    {
    this.fname=fname;
    }

    private String size;
    public String getSize()
    {
    return this.size;

    }
    public void setSize(String size)
    {
    this.size=size;
    }
    }
    谢谢大家!!!
      

  2.   

    建议楼主去我的资源里面找你喜欢的上传组建
    很好用的,对于上传大附件带进度条
    http://lihan6415151528.download.csdn.net/
      

  3.   

    if(file==null) 

    return mapping.findForward("uploadFileSuccess"); } 
    ===========================================
    是不是确定走到这里的,你debug一下看看。我看你action中最后都是到同一个页面
      

  4.   

    对于大的文件建议用ftp的方式上传 不推荐直接上传 
      

  5.   

    我调试到
    FormFile file = uff.getFile();的时候,发现file  值为空
      

  6.   

    上传小文件的时候,可以得到file 的值,文件一旦过大,就发现file  值为空 下面是上传的JSP:  <%@page contentType="text/html;charset=gb2312"%>
    <%@ page language="java"pageEncoding="gb2312"%>
    <jsp:directive.page import="file.BasicFile"/>
    <%@taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <jsp:directive.page import="basic.BasicParameter"/><%

    String uri = request.getRequestURI();
    %>
    <%

    String path;
    if (request.getParameter("path") == null
    || request.getParameter("path").toString().trim() == "")
        {
    path = "";

    else 
    { path = request.getParameter("path").toString().trim();
    }
       session.setAttribute("path",path);
    %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>

    <body bgcolor=<%=BasicParameter.defaultPageColour %>>
    <body> <iframe src="../head.jsp" height="42%" width="100%" frameborder="0"></iframe>

     <html:errors/> 
     如果您选择的上传文件过大,请耐心等待!
    <div align="center" >
     <html:form action="/FileOperations/uploadFile.do"  enctype="multipart/form-data" >
      <table width="420" border="1">
                   <tr>
                     <td width="100%">请选择需要上传的文件:</td>
                     <td width="100%"> <html:file property="file" /></td>
                   </tr>
               </table>
                 <br>
                   <html:submit>提交</html:submit>
                   <html:reset>重置</html:reset>
                  
                           
              </html:form>
             
        </div>
    </body>
    </html>