当我在使用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());
}
}
}
当上传小文件的时候没有问题,但当大文件的时候,就会直接在 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());
}
}
}
/*
* 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;
}
}
谢谢大家!!!
很好用的,对于上传大附件带进度条
http://lihan6415151528.download.csdn.net/
{
return mapping.findForward("uploadFileSuccess"); }
===========================================
是不是确定走到这里的,你debug一下看看。我看你action中最后都是到同一个页面
FormFile file = uff.getFile();的时候,发现file 值为空
<%@ 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>