在web应用中实现文件上传
JspSmartUpload组件简介:JspSmartUpload是一个可免费使用的全功能的文件上传,下载组件,适于嵌入执行上传、下载操作的JSP文件中。该组件有以下几个特点:
1.使用简单、方便。在JSP文件中仅书写3~5行java代码就可以实现文件的上传或下载。
2能全程控制上传。利用JspSmartUpload组件提供的对象及操作方法,可以获得全部文件的信息(包括文件名、大小、类型、扩展名、文件数据等),方便存取。
3能对上传的文件在大小、类型等方面进行限制,这样就可以滤掉不符合要求的文件。
4下载灵活。仅写2行代码,就能web服务器变成文件服务器,不管文件在web目录下还是在其它目录下,都可以利用JspSmartUpload进行下载。
JspSmartUpload可以从网上下载。下载后,得到jspsmartupload.jar文件,将此文件放置于需要使用该组件的站点的WEB/INF/lib目录下,重新启动服务器就可以使用。
JspSmartUpload组件的相关类和方法:
(一)File类
该类封装了一个上传文件的所有信息。通过它,可以得到上传文件的文件名,文件大小,扩展名,文件数据等信息。
File类主要提供以下方法:
1saveAs()方法,作用:将文件换名另存(另存为:)
原型:public void saveAs(java.lang.String destFilePathName)或者public void saveAs(java.lang.String destFilePathName,int optionSaveAs)其中,destFilePathName另存的文件名,optionSaveAs是另存的选项,该选项有三个值,分别为SAVEAS_PHYSICAL,SAVEAS_VIRTUAL和SAVEAS_AUTO。SAVEAS_PHYSICAL表示以操作系统的根目录为文件根目录另存文件,SAVEAS_VIRTUAL表示以web应用程序的根目录为文件根目录另存文件,SAVEAS_AUTO表示让组件决定,当web应用程序的根目录存在另存文件的根目录时,它会选择SAVEAS_VIRTUAL,否则会选择SAVEAS_PHYSICAL。例如:saveAS(“/upload/sample.zip”,SAVEAS_PHYSICAL)执行后若web服务器安装在c盘,则另存的文件名实际是c:\upload\sample.zip.而saveAs(“/upload/sample.zip”,SAVEAS_VIRTRUL)执行后若web目录的根目录是webapps/jspsmartupload,则另存的文件名实际是webapps/jspsmartupload/upload/sample.zip.
saveAs(“/upload/sample/zip”,SAVEAS_AUTO)执行后若web应用程序根目录下存在upload目录,则其效果同saveAs(“/upload/sample.zip”,SAVE_VIRTUAL),否则同saveAs(“/upload/sample.zip”,SAVE_PHYSICAL)
建议:对web应用程序的开发者来说,最好使用SAVEAS_PHYSICAL,便于移植。
2isMissing()方法
作用:该方法用于判断用户是否选择了文件,也就是对应的表单项是否有值,选择文件时,它返回false;未选择文件时,它返回true。
原型:public boolean isMissing()
3getFieldName()方法
作用:取HTML表单中对应于此上传文件的表单项的名字。
原型:public String getFieldName()
4getFileName()方法
作用:取文件名(不含目录信息)
原型:public String getFileName()
5getFilePathName()
作用:取文件全名(带目录)
原型:public String getFilePathName()
6getFileExt()
作用:取文件扩展名(后缀)
原型:public String getFileExt()
7getSize()
作用:取文件长度(以字节计算)
原型:public int getSize()
8getBinaryData()
作用:取文件数据中指定位移处的1个字节,用于检测文件等处理。
原型:public byte getBinaryData(int index)其中,index表示位移,其值在0到getSize()-1之间。
该类表示所有上传文件的集合,通过它可以得到上传文件的数目、大小等信息。
Files类主要提供以下方法。
1getCount()
作用:取得上传文件的数目。
原型:public Int getCount()
2getFile()
作用:取得指定位移处的文件对象File(是com.jspsmart.upload.File,而不是java.io.File,要注意区分)
原型:public File getFile(int index)其中,index为指定位移,其值在0到getCount()-1之间
3getSize()
作用:取得上传文件的总长度,可用于限制一次性上传的数据量大小
原型:public long getSize()
4getCollection()
作用:将所有上传文件对象以Collection的形式返回,以便其它应用程序引用,浏览上传信息。
原型:public Collection getCollection()
5getEnumeration()
作用:将所有上传文件对象以Enumeration(枚举)形式返回,以便其它应用程序浏览上传信息
原型:public Enumeration getEnumeration()
(三)Request类
这个类的功能等同于JSP内置的对象request,这里之所以提供这个类,是因为对于文件上传表单,通过request对象无法无法获得表单项的值,即必须通过JspSmartUpload组件提供的request对象
Request类主要提供以下方法。
1getParameter()方法
作用:获取指定参数之值,当参数不存在时,返回null
原型:public String getParameter(String name)
2getParameterValues(String name)
作用:当一个参数可以有多个参数值时,用此方法来取其值。他返回的是一个字符串数组,当参数不存在时,返回值为null
原型:public String[] getParameterValues(String name)
3getParameterNames()
获取request对象中所有参数的名字,用于便利所有参数。他返回的是一个枚举类型的对象
原型:public Enumeration getParameterNames()
(四)SmartUpload类
该类完成上传,下载工作。
1.1上传于下载共用的方法只有一个,即initialize()方法
作用:执行上传、下载的初始化工作,必须第一个执行。
原型:有多个,主要使用:public final void initialize(javax.servlet.jsp.PageContext pageContext).其中,pageContext为jsp页面内置对象(页面上下文)
1.2上传文件使用的方法如下
1-----Upload()
作用:上传文件数据。对于上传操作,第一步执行initialize()方法,第二步执行upload()方法。
原型:public void upload()
作用:将全部上传文件保存到指定目录下,并返回保存的的文件个数。
原型:public int save(String destPathName)和public int save(String destPathName,int option)
其中,destPathName为文件保存目录,option为保存选项,同样的,他有三个值:SAVE_PHYSICAL,SAVE_VIRTUAL,SAVE_AUTO
(同File类的saveAs()方法的选项之值类似)。SAVE_PHYSICAL指示组件将文件保存到以操作系统根目录为文件根目录的目录下。SAVE_VIRTUAL指示组件将文件保存到以web应用程序根目录为文件目录的目录下,而SAVE_AUTO则表示有组件自行选择。
注:save(destPathName)作用等同于save(destPathName,SAVE_AUTO)的作用。
3-----getSize()方法
作用:获取上传文件数据的总长度
原型:public int getSize()
作用:获取全部上传文件,以Files对象形式返回,可以利用Files类的操作方法来获得上传文件的数目等信息
原型:public Files getFiles()
作用:获取request对象,以便由此对象获的上传表单参数之值
原型:public Request getRequest()
设置允许上传带有指定扩展名的文件,当上传过程中有文件名不允许时,组件将抛出异常。
原型:public void setAllowedFilesList(String allowedFilesList)
其中,allowedFilesList为允许上传的文件扩展名列表,各个参数扩展名之间以逗号分隔。如果想上传那些没有扩展名的文件,可以用两个逗号表示。例如:setAllowedFileList(“doc,txt,,”)将允许上传带有doc和txt扩展名的文件,以及没有扩展名的文件。
作用:用于限制上传那些带有指定扩展名的文件。若有文件名被限制,则上传时组件将抛出异常。
原型:public void setDeniedFilesList(String deniedFilesList)
其中deniedFilesList为禁止上传的文件扩展名列表,各个扩展名之间以逗号隔开,同样,如果想禁止上传那些没有扩展名的文件,则可以用两个括号来表示。例如:setDeniedFilesList(“exe,bat,,”)将禁止上传带有exe和bat扩展名的文件,以及没有扩展名的文件。
作用:设置每个文件允许上传的最大长度
原型:public void setMaxFileSize(long maxFileSize)
其中,maxFileSize为每个文件允许上传的最大长度,文件超出次长度将不被上传。
作用:设定允许上传的文件的总长度,用于限定一次性上传的文件的数据量大小。
原型:public void setTotalMaxFileSize(long totalMaxFileSize)
其中,totalMaxFileSize为允许上传的文件总长度。
1.3下载文件常用的方法
作用:将数据追加到MIME文件头的CONTENT-DISPOSITION域。JspSmartUpload组件会在返回下载信息时自动填写MIME文件头的CONTENT-DISPOSTION域,如果用户需要添加额外的信息,请用此方法。
原型:public void setContentDispostion(String contentDispostion)
其中contentDispositon为要添加的数据,如果contentDisposition为null,则组件将自动添加“attachment”,以表明将下载的文件作为附件,IE浏览器就会提示另存文件,而不是自动打开这个文件(IE浏览器一般根据下载的文件扩展名决定执行什么操作,扩展名为doc的文件将用word程序打开,扩展名为.pdf的文件将用Acrobat程序打开等)
作用:下载文件
原型:共有一下三个原型可用,第一个最常用,后两个用于特殊的文件下载(如更改内容类型,更改另存的文件名)
Public void downloadFile(String sourceFilePathName)
其中,sourceFilePathName为要下载的文件名(带目录的文件名)
Public void downloadFile(String sourceFilePathName,Sting contentType)
其中,sourceFilePathName为要下载的文件名(带目录的文件名),contentType为内容类型(MIME格式的文件类型信息,可被浏览器识别)
Public void downloadFile(String sourceFilePathName,String contentType,String destFileName)
其中,sourceFilePathName为要下载的文件名(带目录的文件全名),contentType为内容类型(MIME格式的文件类型信息,可被浏览器识别),destFileName为下载后的另存文件名。