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>