在jsp中使用smartupload组件上传文件

jsp对上传文件的支持不象php中支持的那么好,直接做成了函数,也不象asp中要通过组件才能实现。jsp中可以通过javabean来实现。但是我们没有必要自己去写一个上载的bean,在网上已经有了很多成型的技术,smartupload就是其中的一个。但是smartupload是将文件先读到服务器的内存中,所以上传太大的文件(超过100兆)有可能会出问题,也算是一个美中不足吧:)

先说一下提交的页面,smartupload组件要求用字节流的方式来提交<FORM action="upload.jsp" encType=multipart/form-data method=post>。下面就是个例子upload.htm:

<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >  
<!--  saved from url=(0057)http://localhost:8080/jspsmartfile/jsp/uploadTemplate.jsp  -->  
< HTML >< HEAD >  
< META  content ="text/html; charset=gb2312"  http-equiv =Content-Type >  
< META  content ="MSHTML 5.00.2920.0"  name =GENERATOR ></ HEAD >  
< BODY  bgColor =#e6e6e6 >< BR >  
< FORM  action ="upload.jsp"  encType =multipart/form-data  method =post >  
< TABLE >  
< TBODY >  
< TR >  
< TD >< FONT  color =#000000  face =helv,helvetica  size =1 > &nbsp;&nbsp; File 
:
&nbsp; </ FONT > &nbsp;&nbsp; < INPUT  size =60  type =file  name ="file" ></ TD ></ TR >  
< TR >  
< TR >  
< TD >< FONT  color =#000000  face =helv,helvetica  size =1 > &nbsp;&nbsp; File 
:
&nbsp; </ FONT > &nbsp;&nbsp; < INPUT  size =60  type =file  name ="file1" ></ TD ></ TR >  
< TR >  
< TD >< FONT  color =#000000  face =helv,helvetica  size =1 > &nbsp;&nbsp; File 
:
&nbsp; </ FONT > &nbsp;&nbsp; < INPUT  size =60  type =text  name ="text" ></ TD ></ TR >  
< TR >  
< TD 
align =right >< INPUT  type =submit  value =Send  name ="send" ></ TD ></ TR ></ TBODY ></ TABLE ></ FORM ></ BODY ></ HTML >  

再来看一下接收的页面 ,我们把文件上传到服务器以后就直接把它再存入数据库中:upload.jsp

<% @ page contentType="text/html;charset=gb2312" %>  
<% @ page import="java.sql.*" %>  
<% @ page import="com.jspsmart.upload.*"  %>  
<% @ page import="DBstep.iDBManager2000.*" %>  
<%  
//实例化上载bean 
com.jspsmart.upload.SmartUpload mySmartUpload
=new com.jspsmart.upload.SmartUpload(); 
//初始化 
mySmartUpload.initialize(pageContext); 
//设置上载的最大值 
mySmartUpload.setMaxFileSize(
500 * 1024*1024); 
//上载文件 
mySmartUpload.upload(); 
//循环取得所有上载的文件 
for (int i=0;i<mySmartUpload.getFiles().getCount();i++){ 
//取得上载的文件 
com.jspsmart.upload.File myFile 
= mySmartUpload.getFiles().getFile(i); 
if (!myFile.isMissing()) 

//取得上载的文件的文件名 
String myFileName=myFile.getFileName(); 
//取得不带后缀的文件名 
String suffix=myFileName.substring(0,myFileName.lastIndexOf('.')); 
//取得后缀名 
String ext= mySmartUpload.getFiles().getFile(0).getFileExt(); 
//取得文件的大小 
int fileSize=myFile.getSize(); 
//保存路径 
String aa=getServletContext().getRealPath("/")+"jsp/"
String trace=aa+myFileName; 
//取得别的参数 
String explain=(String)mySmartUpload.getRequest().getParameter("text"); 
String send=(String)mySmartUpload.getRequest().getParameter("send"); 
//将文件保存在服务器端 
myFile.saveAs(trace,mySmartUpload.SAVE_PHYSICAL); 
//下面的是将上载的文件保存到数据库中 
//将文件读到流中 
java.io.File file 
= new java.io.File(trace); 
java.io.FileInputStream fis 
= new java.io.FileInputStream(file); 
out.println(file.length()); 
//打开数据库 
ResultSet result
=null
String mSql=null
PreparedStatement prestmt
=null
DBstep.iDBManager2000 DbaObj
=new DBstep.iDBManager2000(); 
DbaObj.OpenConnection(); 
//将文件写到数据库中 
mSql
="insert into marklist (markname,password,marksize,markdate,MarkBody) values (?,?,?,?,?)"
prestmt 
=DbaObj.Conn.prepareStatement(mSql); 
prestmt.setString(
1"aaa1"); 
prestmt.setString(
2"0000"); 
prestmt.setInt(
3, fileSize); 
prestmt.setString(
4, DbaObj.GetDateTime()); 
prestmt.setBinaryStream(
5,fis,(int)file.length()); 
DbaObj.Conn.setAutoCommit(
true) ; 
prestmt.executeUpdate(); 
DbaObj.Conn.commit(); 
out.println((
"上载成功!!!").toString()); 

else 
{ out.println((
"上载失败!!!").toString()); } 
}
//与前面的if对应 
%>  

再说一下下载,下载分两种情况1。从数据库直接下载2。从服务器上下载

先说从数据库直接下载的情形:就是把输入流从数据库里读出来,然后转存为文件

<% @ page contentType="text/html; charset=gb2312"  %>  
<% @ page import="java.sql.*" %>  
<% @ page import="java.io.*"  %>  
<% @ page import="DBstep.iDBManager2000.*" %>  
<%  
int bytesum=0
int byteread=0
//打开数据库 
ResultSet result
=null
String Sql=null
PreparedStatement prestmt
=null
DBstep.iDBManager2000 DbaObj
=new DBstep.iDBManager2000(); 
DbaObj.OpenConnection(); 
//取得数据库中的数据 
Sql
="select * from t_local_zhongzhuan "
result
=DbaObj.ExecuteQuery(Sql); 
result.next(); 

//将数据库中的数据读到流中 
InputStream inStream
=result.getBinaryStream("content"); 
FileOutputStream fs
=new FileOutputStream( "c:/dffdsafd.doc"); 

byte[] buffer =new byte[1444]; 
int length; 
while ((byteread=inStream.read(buffer))!=-1

out.println(
"<DT><B>"+byteread+"</B></DT>"); 
bytesum
+=byteread; 
System.out.println(bytesum); 


fs.write(buffer,
0,byteread); 

%>  

再说从服务器上下载的情形: 
 
<% @ page contentType="text/html; charset=gb2312"  %>  
<% @ page import="java.io.*"  %>  
<%  
String fileName = "zsc104.swf".toString(); 
f
//读到流中 
InputStream inStream
=new FileInputStream("c:/zsc104.swf"); 
//设置输出的格式 
response.reset(); 
response.setContentType(
"bin"); 
response.addHeader(
"Content-Disposition","attachment; filename="" + fileName + """); 
//循环取出流中的数据 
byte[] b = new byte[100]; 
int len
while((len=inStream.read(b)) >0
response.getOutputStream().write(b,
0,len); 
inStream.close(); 
%>  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值