java使用smartupload组件实现文件上传的方法
本文实例讲述了java使用smartupload组件实现文件上传的方法。分享给大家供大家参考。具体分析如下:
文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,这里主要说明smartupload组件上传。
在讲解smartupload上传前,我们先来看看不使用组件是怎么完成上传的原理的?
废话不多说直接上代码:
importjava.io.*;
importjava.util.*;
importjavax.servlet.http.HttpServletRequest;
importorg.apache.commons.fileupload.FileItem;
importorg.apache.commons.fileupload.FileUploadException;
importorg.apache.commons.fileupload.disk.DiskFileItemFactory;
importorg.apache.commons.fileupload.servlet.ServletFileUpload;
publicclassFileUploadTools{
privateHttpServletRequestrequest=null;//取得HttpServletRequest对象
privateList<FileItem>items=null;//保存全部的上传内容
privateMap<String,List<String>>params=newHashMap<String,List<String>>(); //保存所有的参数
privateMap<String,FileItem>files=newHashMap<String,FileItem>();
privateintmaxSize=3145728; //默认的上传文件大小为3MB,3*1024*1024
publicFileUploadTools(HttpServletRequestrequest,intmaxSize,
StringtempDir)throwsException{ //传递request对象、最大上传限制、临时保存目录
this.request=request; //接收request对象
DiskFileItemFactoryfactory=newDiskFileItemFactory();//创建磁盘工厂
if(tempDir!=null){ //判断是否需要进行临时上传目录
factory.setRepository(newFile(tempDir));//设置临时文件保存目录
}
ServletFileUploadupload=newServletFileUpload(factory);//创建处理工具
if(maxSize>0){ //如果给的上传大小限制大于0,则使用新的设置
this.maxSize=maxSize;
}
upload.setFileSizeMax(this.maxSize); //设置最大上传大小为3MB,3*1024*1024
try{
this.items=upload.parseRequest(request);//接收全部内容
}catch(FileUploadExceptione){
throwe; //向上抛出异常
}
this.init(); //进行初始化操作
}
privatevoidinit(){ //初始化参数,区分普通参数或上传文件
Iterator<FileItem>iter=this.items.iterator();
IPTimeStampits=newIPTimeStamp(this.request.getRemoteAddr());
while(iter.hasNext()){ //依次取出每一个上传项
FileItemitem=iter.next(); //取出每一个上传的文件
if(item.isFormField()){ //判断是否是普通的文本参数
Stringname=item.getFieldName();//取得表单的名字
Stringvalue=item.getString();//取得表单的内容
List<String>temp=null; //保存内容
if(this.params.containsKey(name)){//判断内容是否已经存放
temp=this.params.get(name);//如果存在则取出
}else{ //不存在
temp=newArrayList<String>();//重新开辟List数组
}
temp.add(value); //向List数组中设置内容
this.params.put(name,temp); //向Map中增加内容
}else{ //判断是否是file组件
StringfileName=its.getIPTimeRand()
+"."+item.getName().split("\\.")[1];
this.files.put(fileName,item);//保存全部的上传文件
}
}
}
publicStringgetParameter(Stringname){ //取得一个参数
Stringret=null; //保存返回内容
List<String>temp=this.params.get(name);//从集合中取出内容
if(temp!=null){ //判断是否可以根据key取出内容
ret=temp.get(0); //取出里面的内容
}
returnret;
}
publicString[]getParameterValues(Stringname){//取得一组上传内容
Stringret[]=null; //保存返回内容
List<String>temp=this.params.get(name);//根据key取出内容
if(temp!=null){ //避免NullPointerException
ret=temp.toArray(newString[]{});//将内容变为字符串数组
}
returnret; //变为字符串数组
}
publicMap<String,FileItem>getUploadFiles(){//取得全部的上传文件
returnthis.files; //得到全部的上传文件
}
publicList<String>saveAll(StringsaveDir)throwsIOException{//保存全部文件,并返回文件名称,所有异常抛出
List<String>names=newArrayList<String>();
if(this.files.size()>0){
Set<String>keys=this.files.keySet();//取得全部的key
Iterator<String>iter=keys.iterator();//实例化Iterator对象
FilesaveFile=null; //定义保存的文件
InputStreaminput=null; //定义文件的输入流,用于读取源文件
OutputStreamout=null; //定义文件的输出流,用于保存文件
while(iter.hasNext()){ //循环取出每一个上传文件
FileItemitem=this.files.get(iter.next());//依次取出每一个文件
StringfileName=newIPTimeStamp(this.request.getRemoteAddr())
.getIPTimeRand()
+"."+item.getName().split("\\.")[1];
saveFile=newFile(saveDir+fileName); //重新拼凑出新的路径
names.add(fileName); //保存生成后的文件名称
try{
input=item.getInputStream(); //取得InputStream
out=newFileOutputStream(saveFile); //定义输出流保存文件
inttemp=0; //接收每一个字节
while((temp=input.read())!=-1){ //依次读取内容
out.write(temp); //保存内容
}
}catch(IOExceptione){ //捕获异常
throwe; //异常向上抛出
}finally{ //进行最终的关闭操作
try{
input.close(); //关闭输入流
out.close(); //关闭输出流
}catch(IOExceptione1){
throwe1;
}
}
}
}
returnnames; //返回生成后的文件名称
}
}
上面代码便可以完成无组件上传。
下面开始讲解smartupload
smartupload是由www.jspsmart.com网站开发的一套上传组件包,可以轻松的实现文件的上传及下载功能,smartupload组件使用简单、可以轻松的实现上传文件类型的限制、也可以轻易的取得上传文件的名称、后缀、大小等。
smartupload本身是一个系统提供的jar包(smartupload.jar),用户直接将此包放到classpath下即可,也可以直接将此包拷贝到TOMCAT_HOME\lib目录之中。
下面使用组件完成上传
单一文件上传:
<html> <head><title>smartupload组件上传</title> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/></head> <body> <formaction="smartupload_demo01.jsp"method="post"enctype="multipart/form-data"> 图片<inputtype="file"name="pic"> <inputtype="submit"value="上传"> </form> </body> </html>
jsp代码:
smartupload_demo01.jsp
<%@pagecontentType="text/html"pageEncoding="utf-8"%> <%@pageimport="com.jspsmart.upload.*"%> <html> <head><title>smartupload组件上传01</title></head>
<body> <% SmartUploadsmart=newSmartUpload(); smart.initialize(pageContext); //初始化上传操作 smart.upload(); //上传准备 smart.save("upload"); //文件保存 out.print("上传成功"); %>
</body> </html>