天天看点

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

在用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"%>

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

<%

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.upload.*;

* <p>title:uploadform</p>

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就是随便写一个成功页-->