jspSmartUpload 简易教程


1 jspSmartUpload 简易教程 Edit by:Alex Zhu Version:0.1 beta 目录 概要说明 ..................................................................................................................................2 下载和使用...............................................................................................................................2 相关类说明...............................................................................................................................3 File 类..............................................................................................................................3 Files 类............................................................................................................................4 Request 类 .......................................................................................................................5 SmartUpload 类 这个类完成上传下载工作..................................................................5 小结 ..........................................................................................................................................7 示例 ..........................................................................................................................................8 示例 1 多文件上传..........................................................................................................8 示例 2 多文件上传 使用集合处理................................................................................9 示例 3 受限文件的上传................................................................................................11 示例 4 上传至数据库....................................................................................................12 示例 5 混合上传:file + form field.............................................................................13 示例 6 从服务器文件中下载........................................................................................17 示例 7 从数据库中下载................................................................................................18 2 概要说明 jspSmartUpload 是一个可免费使用的全功能的文件上传下载组件,适于嵌 入执行上传下载操作的 JSP 文件中。该组件有以下几个特点: 1、使用简单。在JSP 文件中仅仅书写三五行 java 代码就可以搞定文件的上 传或下载,使用方便。 2、能全程控制上传。利用 jspSmartUpload 组件提供的对象及其操作方法, 可以获得全部上传文件的信息(包括文件名,大小,类型,扩展名,文件数据等), 方便存取。 3、能对上传的文件在大小、类型等方面做出限制。如此可以滤掉不符合要 求的文件。 4、下载灵活。仅写两行代码,就能把 Web 服务器变成文件服务器。不管文 件在 Web 服务器的目录下或在其它任何目录下,都可以利用 jspSmartUpload 进 行下载。 下载和使用 jspSmartUpload 组件可以从网上自由下载,压缩包的名字是 jspSmartUpload.zip。下载后,用 WinZip 或 WinRAR 将其解压到 Tomcat 的 webapps 目录下(以 Tomcat 服务器为例进行介绍)。解压后,将 webapps/jspsmartupload 目录下的子目录 Web-inf 名字改为全大写的 WEB-INF,这样一改 jspSmartUpload 类才能使用。因为 Tomcat 对文件名大小写敏感,它要求 Web 应用程序相关的类 所在目录为 WEB-INF,且必须是大写。接着重新启动 Tomcat,这样就可以在 JSP 文件中使用 jspSmartUpload 组件了。 注意,按上述方法安装后,只有 webapps/jspsmartupload 目录下的程序可 以使用 jspSmartUpload 组件,如果想让 Tomcat 服务器的所有 Web 应用程序都能 用它,必须做如下工作: 1.进入命令行状态,将目录切换到 Tomcat 的 webapps/jspsmartupload/WEB-INF 目录下。 2.运行 JAR 打包命令:jar cvf jspSmartUpload.jar com (也可以打开资源管理器,切换到当前目录,用 WinZip 将 com 目录下的所 有文件压缩成 jspSmartUpload.zip,然后将 jspSmartUpload.zip 换名为 jspSmartUpload.jar 文件即可。) 3.将 jspSmartUpload.jar 拷贝到 Tomcat 的 shared/lib 目录下。 3 相关类说明 File 类 这个类包装了一个上传文件的所有信息。通过它,可以得到上传文件的文件 名、文件大小、扩展名、文件数据等信息。 File 类主要提供以下方法: 1、saveAs()作用:将文件换名另存。 原型: 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_VIRTUAL) 执行后若 Web 应用程序的根目录是 webapps/jspsmartupload,则另存的文 件名实际是 webapps/jspsmartupload/upload /sample.zip。 saveAs("/upload/sample.zip",SAVEAS_AUTO)执行时若 Web 应用程 序根目录下存在 upload 目录,则其效果同 saveAs("/upload/sample.zip",SAVEAS_VIRTUAL), 否则同 saveAs(" /upload/sample.zip",SAVEAS_PHYSICAL)。 建议:对于 Web 程序的开发来说,最好使用 SAVEAS_VIRTUAL,以便移植。 2、isMissing() 作用:这个方法用于判断用户是否选择了文件,也即对应的表单项是否有值。 选择了文件时,它返回 false。未选文件时,它返回 true。 4 原型:public boolean isMissing() 3、getFieldName() 作用:取 HTML 表单中对应于此上传文件的表单项的名字。 原型:public String getFieldName() 4、getFileName() 作用:取文件名(不含目录信息) 原型:public String getFileName() 5、getFilePathName() 作用:取文件全名(带目录) 原型:public String getFilePathName 6、getFileExt() 作用:取文件扩展名(后缀) 原型:public String getFileExt() 7、getSize() 作用:取文件长度(以字节计) 原型:public int getSize() 8、getBinaryData() 作用:取文件数据中指定位移处的一个字节,用于检测文件等处理。 原型:public byte getBinaryData(int index)。其中,index 表示位移, 其值在 0 到 getSize()-1 之间。 Files 类 这个类表示所有上传文件的集合,通过它可以得到上传文件的数目、大小等 信息。有以下方法: 1、getCount() 作用:取得上传文件的数目。 原型:public int getCount() 2、getFile() 作用:取得指定位移处的文件对象 File(这是 com.jspsmart.upload.File,不是 java.io.File,注意区分)。 原型:public File getFile(int index)。其中,index 为指定位移,其值 在 0 到 getCount()-1 之间。 3、getSize() 作用:取得上传文件的总长度,可用于限制一次性上传的数据量大小。 原型:public long getSize() 4、getCollection() 作用:将所有上传文件对象以 Collection 的形式返回,以便其它应用程序 引用,浏览上传文件信息。 原型:public Collection getCollection() 5、getEnumeration() 作用:将所有上传文件对象以 Enumeration(枚举)的形式返回,以便其它 应用程序浏览上传文件信息。 原型:public Enumeration getEnumeration() 5 Request 类 这个类的功能等同于 JSP 内置的对象 request。只所以提供这个类,是因为 对于文件上传表单,通过 request 对象无法获得表单项的值,必须通过 jspSmartUpload 组件提供的 Request 对象来获取。该类提供如下方法: 1、getParameter() 作用:获取指定参数之值。当参数不存在时,返回值为 null。 原型:public String getParameter(String name)。其中,name 为参数的 名字。 2、getParameterValues() 作用:当一个参数可以有多个值时,用此方法来取其值。它返回的是一个字 符串数组。当参数不存在时,返回值为 null。 原型:public String[] getParameterValues(String name)。其中,name 为参数的名字。 3、getParameterNames() 作用:取得 Request 对象中所有参数的名字,用于遍历所有参数。它返回的 是一个枚举型的对象。 原型:public Enumeration getParameterNames() SmartUpload 类 这个类完成上传下载工作 A.上传与下载共用的方法: 只有一个:initialize() 作用:执行上传下载的初始化工作,必须第一个执行。 原型:有多个,主要使用下面这个: public final void initialize(javax.servlet.jsp.PageContext pageContext) 其中,pageContext 为 JSP 页面内置对象(页面上下文)。 B.上传文件使用的方法: 1、upload() 作用:上传文件数据。对于上传操作,第一步执行 initialize 方法,第二 步就要执行这个方法。 原型:public void upload() 2、save() 作用:将全部上传文件保存到指定目录下,并返回保存的文件个数。 原型: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)。 6 3、getSize() 作用:取上传文件数据的总长度 原型:public int getSize() 4、getFiles() 作用:取全部上传文件,以 Files 对象形式返回,可以利用 Files 类的操作 方法来获得上传文件的数目等信息。 原型:public Files getFiles() 5、getRequest() 作用:取得 Request 对象,以便由此对象获得上传表单参数之值。 原型:public Request getRequest() 6、setAllowedFilesList() 作用:设定允许上传带有指定扩展名的文件,当上传过程中有文件名不允许 时,组件将抛出异常。 原型:public void setAllowedFilesList(String allowedFilesList) 其中,allowedFilesList 为允许上传的文件扩展名列表,各个扩展名之间 以逗号分 隔。如果想允许上传那些没有扩展名的文件,可以用两个逗号表示。 例如:setAllowedFilesList("doc,txt,,")将允许上传带 doc 和 txt 扩展名的 文件以及没有扩展名的文件。 7、setDeniedFilesList() 作用:用于限制上传那些带有指定扩展名的文件。若有文件扩展名被限制, 则上传时组件将抛出异常。 原型:public void setDeniedFilesList(String deniedFilesList) 其中,deniedFilesList 为禁止上传的文件扩展名列表,各个扩展名之间以 逗号分 隔。如果想禁止上传那些没有扩展名的文件,可以用两个逗号来表示。 例如:setDeniedFilesList("exe,bat,,")将禁止上传带 exe 和 bat 扩展名的文 件以及没有扩展名的文件。 8、setMaxFileSize() 作用:设定每个文件允许上传的最大长度。 原型:public void setMaxFileSize(long maxFileSize) 其中,maxFileSize 为为每个文件允许上传的最大长度,当文件超出此长度 时,将不被上传。 9、setTotalMaxFileSize() 作用:设定允许上传的文件的总长度,用于限制一次性上传的数据量大小。 原型:public void setTotalMaxFileSize(long totalMaxFileSize) 其中,totalMaxFileSize 为允许上传的文件的总长度。 C.下载文件常用的方法 1、setContentDisposition 作用:将数据追加到 MIME 文件头的 CONTENT-DISPOSITION 域。 jspSmartUpload 组件会在返回下载的信息时自动填写 MIME 文件头的 CONTENT-DISPOSITION 域,如果用户需要添加额外信息,请用此方法。 原型:public void setContentDisposition(String contentDisposition) 其中,contentDisposition 为要添加的数据。如果 contentDisposition 为 null,则组件将自动添加"attachment;",以表明将下载的文件作为附件,结 果是 IE 浏览器将会提示 另存文件,而不是自动打开这个文件(IE 浏览器一般 7 根据下载的文件扩展名决定执行什么操作,扩展名为 doc 的将用 Word 程序打开, 扩展名为 pdf 的将用 acrobat 程序打开,等等)。 2、downloadFile() 作用:下载文件。 原型:共有以下三个原型可用,第一个最常用,后两个用于特殊情况下的文 件下载(如更改内容类型,更改另存的文件名)。 ① public void downloadFile(String sourceFilePathName) 其中,sourceFilePathName 为要下载的文件名(带目录的文件全名) ② public void downloadFile(String sourceFilePathName,String contentType) 其中,sourceFilePathName 为要下载的文件名(带目录的文件全 名),contentType 为内容类型(MIME 格式的文件类型信息,可被浏览器识别)。 ③ public void downloadFile(String sourceFilePathName,String contentType,String destFileName) 其中,sourceFilePathName 为要下载的文件名(带目录的文件全 名),contentType 为内容类型(MIME 格式的文件类型信息,可被浏览器识 别),destFileName 为下载后默认的另存文件名。 小结 jspSmartUpload 组件是应用 JSP 进行 B/S 程序开发过程中经常使用的上传 下载组件,它使用简单,方便。 8 示例 示例 1 多文件上传




点击上传后处理 <%@ page language="java" import="com.jspsmart.upload.*"%>

jspsmartupload : sample 1


<% // Variables int count=0; // Initialization mySmartUpload.initialize(pageContext); mySmartUpload.setTotalMaxFileSize(100000); // Upload mySmartUpload.upload(); try { // Save the files with their original names in the virtual path "/upload" // if it doesn't exist try to save in the physical path "/upload" count = mySmartUpload.save("/upload"); // Save the files with their original names in the virtual path "/upload" // count = mySmartUpload.save("/upload", mySmartUpload.SAVE_VIRTUAL); // Display the number of files uploaded out.println(count + " file(s) uploaded."); } catch (Exception e) { out.println(e.toString()); } %> 9 示例 2 多文件上传 使用集合处理




点击上传后的处理 <%@ page language="java" import="com.jspsmart.upload.*"%>

jspSmartUpload : Sample 2


<% // Variables int count=0; // Initialization mySmartUpload.initialize(pageContext); // Upload mySmartUpload.upload(); // Select each file for (int i=0;i"); out.println("Size = " + myFile.getSize() + "
"); out.println("FileName = " + myFile.getFileName() + "
"); out.println("FileExt = " + myFile.getFileExt() + "
"); out.println("FilePathName = " + myFile.getFilePathName() + "
"); out.println("ContentType = " + myFile.getContentType() + "
"); out.println("ContentDisp = " + myFile.getContentDisp() + "
"); out.println("TypeMIME = " + myFile.getTypeMIME() + "
"); out.println("SubTypeMIME = " + myFile.getSubTypeMIME() + "
"); count ++; } // end if } // end for // Display the number of files which could be uploaded out.println("
" + mySmartUpload.getFiles().getCount() + " files could be uploaded.
"); // Display the number of files uploaded out.println(count + " file(s) uploaded."); %> 10 处理的结果 11 示例 3 受限文件的上传 上传处理代码 <% // Variables int count=0; // Initialization mySmartUpload.initialize(pageContext); // Only allow txt or htm files mySmartUpload.setAllowedFilesList("htm,html,txt,,"); // DeniedFilesList can also be used : // mySmartUpload.setDeniedFilesList("exe,bat,jsp"); // Deny physical path // mySmartUpload.setDenyPhysicalPath(true); // Only allow files smaller than 50000 bytes // mySmartUpload.setMaxFileSize(50000); // Deny upload if the total file size is greater than 200000 bytes // mySmartUpload.setTotalMaxFileSize(200000); // Upload mySmartUpload.upload(); // Save the files with their original names in a virtual path of the web server try { count = mySmartUpload.save("/upload", mySmartUpload.SAVE_VIRTUAL); } catch (Exception e){ out.println("Wrong selection : " + e.toString()); } // Display the number of files uploaded out.println(count + " file(s) uploaded."); %> 12 示例 4 上传至数据库 创建数据库 CREATE DATABASE TEST; USE TEST GO CREATE TABLE TFILES (ID INT NOT NULL, [FILENAME] VARCHAR(255), [FILE] image, PRIMARY KEY (ID)); INSERT TFILES (ID, [FILENAME], [FILE]) VALUES (1,'sample',null);

上传处理代码 <% // Variables int count=0; // Connect to the database Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance(); Connection con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=test;user=sa;password=sa"); // SQL Request Statement stmt = con.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executeQuery("SELECT * FROM TFILES WHERE ID=1"); // if the resultset is not null if (rs.next()){ // Initialization mySmartUpload.initialize(pageContext); // Upload mySmartUpload.upload(); // upload file in the DB if this file is not missing if (!mySmartUpload.getFiles().getFile(0).isMissing()){ try { rs.updateString("FILENAME",mySmartUpload.getFiles().getFile(0).getFileName()); // Add the current file in the DB field mySmartUpload.getFiles().getFile(0).fileToField(rs, "FILE"); // Update rs.updateRow(); count++; } catch(Exception e) { out.println("An error occurs : " + e.toString()); } } } // Display the number of files uploaded out.println(count + " file(s) uploaded in the database."); rs.close(); stmt.close(); con.close(); %> 13 示例 5 混合上传:file + form field
15
select a first file :
select a second file :

text :

text area :

password :

14

hidden :

checkbox :

value 1
value 2
value 3

radio :

value 1
value 2
value 3

simple select :

multiple select :

上传后的处理 <% // Initialization myUpload.initialize(pageContext); // Upload myUpload.upload(); // Files out.println("
Display information about Files
"); out.println("Number of files = " + myUpload.getFiles().getCount() + "
"); //out.println("Total size (bytes) = " + myUpload.getFiles().getSize() +"
"); for (int i = 0; i < myUpload.getFiles().getCount(); i++) { out.print(myUpload.getFiles().getFile(i).getFieldName()); if (!myUpload.getFiles().getFile(i).isMissing()) out.print(" = " + myUpload.getFiles().getFile(i).getFileName() + " (" + myUpload.getFiles().getFile(i).getSize() + ")"); else out.print(" = vide"); out.println("
"); } // Request out.println("

Display information about Requests
"); // Retreive Requests' names java.util.Enumeration e = myUpload.getRequest().getParameterNames(); // Retreive parameters while (e.hasMoreElements()) { String key = (String) e.nextElement(); String[] values = myUpload.getRequest().getParameterValues(key); // Browse the current parameter values for (int i = 0; i < values.length; i++) { out.print(key + " = "); out.print(values[i] + "
"); } } %> 16 17 示例 6 从服务器文件中下载

jspsmartupload : sample 6


download <%@ page language="java" import="com.jspsmart.upload.*"%> <% // Initialization mySmartUpload.initialize(pageContext); // Download file mySmartUpload.downloadFile("/upload/sample.zip"); // With a physical path // mySmartUpload.downloadFile("c:\\temp\\sample.zip") // With options // mySmartUpload.downloadFile("/upload/sample.zip","application/x-zip-co mpressed","downloaded.zip") %> 18 示例 7 从数据库中下载

jspsmartupload : sample 6


download <%@ page language="java" import="java.sql.*,com.jspsmart.upload.*"%> <% // Connect to the database Class.forName("org.gjt.mm.mysql.Driver").newInstance(); Connection con = DriverManager.getConnection("jdbc:mysql:///test"); // SQL Request Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM TFILES"); // if the resultset is not null if (rs.next()) { // Initialization mySmartUpload.initialize(pageContext); // Download field mySmartUpload.downloadField(rs, "FILE", "application/x-msdownload", "sample7.txt"); // Field To File // mySmartUpload.fieldToFile(rs,"FILE","c:\\temp\\sample7.txt"); } rs.close(); stmt.close(); con.close(); %>
还剩17页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 7 人已下载

下载pdf

pdf贡献者

djytotti

贡献于2012-03-20

下载需要 5 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf