您的位置:首页 > Web前端 > JavaScript

用JSP实现上传文件的两种方法

2013-06-08 08:19 806 查看
key words: 文件上传,upload, cos.jar + uploadbean.jar + filemover.jar

以前用cos作文件上传,但是对于文件上传后的改名还需要借助其他的工具。

摘录如下:

在用Java开发企业器系统的使用,特别是涉及到与办公相关的软件开发的时候,文件的上传是客户经常要提到的要求.因此有 一套很好文件上传的解决办法也能方便大家在这一块的开发.

首先申明,该文章是为了自己记录一备以后开发需要的时候,不用手忙脚乱哈哈........

现在在国内用的非常多的一般是两种方法解决来解决文件上传.

cos.jar + uploadbean.jar + filemover.jar

这个是用的非常普遍的,原因是因为他操作方便,是我们不必再去关注,那些文件的输入和输出流,使我们从底层的流中解脱出来.

UploadFile,UploadBean,MultipartFormDataRequest


<%@ page
contentType="text/html;charset=gb2312" %>


<head>


<title>fbysss
UploadBean 示例</title>


<!--meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1"-->


<!--meta http-equiv="Content-Type"
content="text/html; charset=gb2312"-->


</head>


<FORM
name="form1" METHOD="POST" ACTION="sssupload.jsp"
ENCTYPE="multipart/form-data">


<input
name="title" type= "text" value="中文字">


<td
class="bodystyle">附件</td>


<td
class="bodystyle">
<input
name="attach" type="FILE" id="attach"
size="50"
> </td>


<input
name="ok" type= "submit" value="提交">


</form>



2.读取表单页面sssgetdata.jsp


<!--


//==========================================================================


//文件:UploadBean上传实例


//功能:解决中文乱码,完成文件上传,并提供上传改名解决方案


//作者:fbysss


//msn:jameslastchina@hotmail.com


//==========================================================================


-->


<%@ page
contentType="text/html;charset=GBK" %>


<%@ page
language="java" import="com.jspsmart.upload.*"%>


<%@ page
import="java.text.SimpleDateFormat"%>


<%@ page
import="java.io.File"%>


<%@ page
import="java.util.*"%>


<%@ page
import="javazoom.upload.*"%>


<%@ page
import="uploadutilities.FileMover"%>


<head>


<meta
http-equiv="Content-Type" content="text/html; charset=gb2312">


</head>


<%


request.setCharacterEncoding("GBK");//设置编码格式,就不用一个个转码了。


FileMover fileMover
= new FileMover();//你也可以使用自带的实例中jsp:useBean的形式。


UploadBean upBean
= new UploadBean();


MultipartFormDataRequest mrequest
= null;


Hashtable files
= null;




if (MultipartFormDataRequest.isMultipartFormData(request))


{


mrequest
= new MultipartFormDataRequest(request,null,100*1024*1024,MultipartFormDataRequest.COSPARSER,"GBK");//注意这里也要设置编码参数


String sTt0
= mrequest.getParameter("title");


out.println("<br>Title0是:"+sTt0+"<br>");


String sTt1 = new String(sTt0.getBytes("ISO-8859-1"),"GBK");


out.println("<br>Title1是:"+sTt1+"<br>");


//这里用来测试title参数是否正确。调试的时候,加一句if (true)return;即可。


files = mrequest.getFiles();


}






//获取修改前的文件名


String sOldFileName =mrequest.getParameter("oldfilename");


out.println("sOldFileName:"+sOldFileName);


String sWebRootPath = request.getRealPath("/");//得到你的web应用的根。


String sPath=sWebRootPath+"attach";


int iFileCount = 0;


String sServerFileName="";


String sLocalFileName = "";


//文件获取


if ( (files != null) || (!files.isEmpty()) ) {




iFileCount = files.size();


UploadFile file = (UploadFile) files.get("attach");


sLocalFileName=file.getFileName();


out.println("sLocalFileName:"+sLocalFileName);


int ii= sLocalFileName.indexOf("."); //取文件名的后缀


String sExt = sLocalFileName.substring(ii,sLocalFileName.length());


//得到不重复的文件名


java.util.Date dt = new java.util.Date(System.currentTimeMillis());


SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS");


sServerFileName= fmt.format(dt);


sServerFileName =sServerFileName + sExt;


//如果不存在该目录,则新建一个


File dir =new File(sPath);


if (!dir.exists()){


dir.mkdirs();


}


upBean.setFolderstore(sPath);//设置要上传的目录


upBean.addUploadListener(fileMover);//增加filMover监听


fileMover.setNewfilename(sServerFileName);//设置服务器上的文件名


upBean.store(mrequest, "attach");//上传


out.println("file path is "+sPath+"/"+sServerFileName);


}




%>



Demo注意事项:cos.jar,uploadbean.jar,filemover.jar这几个包必须有。

必备下载地址:

UploadBean1.5:http://wcarchive.cdrom.com/pub/simtelnet/winnt/java/uploadbean1_5.zip

FileMover1.3:http://www.javazoom.net/jzservlets/uploadbean/addons/filemover1.3.zip

参考下载地址:

ChinesUpload例子:http://www.javazoom.net/jzservlets/uploadbean/addons/ChineseUpload.zip

参考了fbysss的一篇文章

2. org.apache.struts.upload.FormFile

Struts1.1的org.apache.struts.upload.FormFile类。很方便,不用自己写。也不用写一个jsp调用jspsmartupload就可以搞定。

选择上传文件页面:selfile.jsp

--------------------------------------------------------------------------------

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>

<html:html>

<html:form action="/uploadsAction.do" enctype="multipart/form-data">

<html:file property="theFile"/>

<html:submit/>

</html:form>

</html:html>

--------------------------------------------------------------------------------

UpLoadAction.java

--------------------------------------------------------------------------------


import java.io.*;


import javax.servlet.http.*;


import org.apache.struts.action.*;


import org.apache.struts.upload.FormFile;






/**
*//**


* <p>Title:UpLoadAction</p>


* <p>Description: QRRSMMS </p>


* <p>Copyright: Copyright (c) 2004 jiahansoft</p>


* <p>Company: jiahansoft</p>


*
@author wanghw


*
@version 1.0


*/






public
class UpLoadAction
extends Action


{


public ActionForward execute(ActionMapping mapping,


ActionForm form,


HttpServletRequest request,


HttpServletResponse response)




throws
Exception

{




if
(form instanceof uploadsForm)


{//如果form是uploadsForm


String encoding
= request.getCharacterEncoding();


if ((encoding
!= null)
&& (encoding.equalsIgnoreCase("utf-8")))






{


response.setContentType("text/html; charset=gb2312");//如果没有指定编码,编码格式为gb2312


}


UpLoadForm theForm
= (UpLoadForm ) form;


FormFile file
= theForm.getTheFile();//取得上传的文件




try


{


InputStream stream
= file.getInputStream();//把文件读入


String filePath
= request.getRealPath("/");//取当前系统路径


ByteArrayOutputStream baos
= new ByteArrayOutputStream();


OutputStream bos
= new FileOutputStream(filePath
+ "/"
+


file.getFileName());//建立一个上传文件的输出流


//System.out.println(filePath+"/"+file.getFileName());


int bytesRead
= 0;


byte[] buffer
= new
byte[8192];




while
( (bytesRead = stream.read(buffer,
0, 8192))
!= -1)


{


bos.write(buffer,
0, bytesRead);//将文件写入服务器


}


bos.close();


stream.close();




}catch(Exception
e)

{


System.err.print(e);


}


//request.setAttribute("dat",file.getFileName());


return mapping.findForward("display");


}


return
null;


}


}





--------------------------------------------------------------------------------

UpLoadForm.java

--------------------------------------------------------------------------------


import javax.servlet.http.HttpServletRequest;


import org.apache.struts.action.*;


import org.apache.struts.upload.*;






/**
*//**


* <p>Title:UpLoadForm</p>


* <p>Description: QRRSMMS </p>


* <p>Copyright: Copyright (c) 2004 jiahansoft</p>


* <p>Company: jiahansoft</p>


*
@author wanghw


*
@version 1.0


*/






public
class UpLoadForm
extends ActionForm


{


public
static
final String ERROR_PROPERTY_MAX_LENGTH_EXCEEDED
= "org.apache.struts.webapp.upload.MaxLengthExceeded";


protected FormFile theFile;




public
FormFile getTheFile()

{


return theFile;


}




public
void setTheFile(FormFile theFile)


{


this.theFile
= theFile;


}


public
ActionErrors validate(ActionMapping mapping, HttpServletRequest request)






{


ActionErrors errors
= null;


//has the maximum length been exceeded?


Boolean maxLengthExceeded
= (Boolean)


request.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);


if ((maxLengthExceeded
!= null)
&& (maxLengthExceeded.booleanValue()))






{


errors
= new ActionErrors();


errors.add(ERROR_PROPERTY_MAX_LENGTH_EXCEEDED,
new ActionError("maxLengthExceeded"));


}


return
errors;




}


}


//这是相对应的form,还有其他属性可以设置,具体可以参考struts的上传例子。



--------------------------------------------------------------------------------

struts-config.xml

--------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd";>

<struts-config>

<form-beans>

<form-bean name="uploadsForm" type="UpLoadForm" />

</form-beans>

<action-mappings>

<action name="uploadsForm" type="UpLoadAction" path="/uploadsAction">

<forward name="display" path="/display.jsp" />

</action>

</action-mappings>

</struts-config>

<!--display.jsp就是随便写一个成功页-->
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: