JSP实现上传文件的两种方法
2024-09-05 00:20:25
供稿:网友
在用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:[email protected]
//==========================================================================
-->
<%@ 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就是随便写一个成功页-->
注册会员,创建你的web开发资料库,