admin 管理员组

文章数量: 887021


2023年12月19日发(作者:文艺复兴美术家)

上传下载全攻略jspSmartUpload

疯狂代码 / ĵ:Java/

、安装篇

  jspSmartUpload是由网站WebSite开发个可免费使用全功能文件上传下载组件适于嵌入执行上传下载操作JSP文件中该组件有以下几个特点:

1、使用简单在JSP文件中仅仅书写 3 5行JAVA代码就可以搞定文件上传或下载方便

2、能全程控制上传利用jspSmartUpload组件提供对象及其操作思路方法可以获得全部上传文件信息(包括文件名大小类型扩展名文件数据等)方便存取

3、能对上传文件在大小、类型等方面做出限制如此可以滤掉不符合要求文件

4、下载灵活仅写两行代码就能把Web服务器变成文件服务器不管文件在Web服务器目录下或在其它任何目录下都可以利用jspSmartUpload进行下载

5、能将文件上传到数据库中也能将数据库中数据下载下来这种功能针对是MYSQL数据库不具有通用性所以本文不准备举例介绍这种使用方法

  jspSmartUpload组件可以从网站WebSite上自由下载压缩包名字是下载后用WinZip或WinRAR将其解压到Tomcatwebapps目录下(本文以Tomcat服务器为例进行介绍)解压后将webapps/jspsmartupload目录下子目录Web-inf名字改为全大写WEB-INF这样改jspSmartUpload类才能使用Tomcat对文件名大小写敏感它要求Web应用相关类所在目录为WEB-INF且必须是大写接着重新启动Tomcat这样就可以在JSP文件中使用jspSmartUpload组件了

  注意按上述思路方法安装后只有webapps/jspsmartupload目录下可以使用jspSmartUpload组件如果想让Tomcat服务器所有Web应用都能用它必须做如下工作:

1.进入命令行状态将目录切换到Tomcatwebapps/jspsmartupload/WEB-INF目录下

2.运行JAR打包命令:jar cvf com

(也可以打开资源管理器切换到当前目录用WinZip将com目录下所有文件压缩成然后将换名为文件即可)

3.将拷贝到Tomcatshared/lib目录下

2、相关类介绍说明篇

File类

  这个类包装了个上传文件所有信息通过它可以得到上传文件文件名、文件大小、扩展名、文件数据等信息

  File类主要提供以下思路方法:

1、saveAs作用:将文件换名另存

原型:

public void saveAs( destFilePathName)

public void saveAs( destFilePathName, optionSaveAs)

其中destFilePathName是另存文件名optionSaveAs是另存选项该选项有 3个值分别是SAVEAS_PHYSICAL,SAVEAS_VIRTUALSAVEAS_AUTOSAVEAS_PHYSICAL表明以操作系统根目录为文件根目录另存文件SAVEAS_VIRTUAL表明以Web应用根目录为文件根目录另存文件SAVEAS_AUTO则表示让组件决定当Web应用根目录存在另存文件目录时它会选择SAVEAS_VIRTUAL否则会选择SAVEAS_PHYSICAL

例如saveAs("/upload/",SAVEAS_PHYSICAL)执行后若Web服务器安装在C盘则另存文件名实际是c:而saveAs("/upload/",SAVEAS_VIRTUAL)执行后若Web应用根目录是webapps/jspsmartupload则另存文件名实际是webapps/jspsmartupload/upload/eAs("/upload/",SAVEAS_AUTO)执行时若Web应用根目录下存在upload目录则其效果同saveAs("/upload/",SAVEAS_VIRTUAL)否则同saveAs("/upload/",SAVEAS_PHYSICAL)

建议:对于Web开发来说最好使用SAVEAS_VIRTUAL以便移植

2、isMissing

作用:这个思路方法用于判断用户是否选择了文件也即对应表单项是否有值选择了文件时它返回false未选文件时它返回true

原型: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 getSize

8、getBinaryData

作用:取文件数据中指定位移处个字节用于检测文件等处理

原型:public getBinaryData( index)其中index表示位移其值在0到getSize-1的间

Files类

  这个类表示所有上传文件集合通过它可以得到上传文件数目、大小等信息有以下思路方法:

1、getCount

作用:取得上传文件数目

原型:public getCount

2、getFile

作用:取得指定位移处文件对象File(这是不是注意区分)

原型:public File getFile( index)其中index为指定位移其值在0到getCount-1的间

3、getSize

作用:取得上传文件总长度可用于限制次性上传数据量大小

原型:public long getSize

4、getCollection

作用:将所有上传文件对象以Collection形式返回以便其它应用引用浏览上传文件信息

原型:public Collection getCollection

5、getEnumeration

作用:将所有上传文件对象以Enumeration(枚举)形式返回以便其它应用浏览上传文件信息

原型:public Enumeration getEnumeration

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(ntext pageContext)

其中pageContext为JSP页面内置对象(页面上下文)

B.上传文件使用思路方法:

1、upload

作用:上传文件数据对于上传操作第步执行initialize思路方法第 2步就要执行这个思路方法

原型:public void upload

2、save

作用:将全部上传文件保存到指定目录下并返回保存文件个数

原型:public save(String destPathName)

和public save(String destPathName, option)

其中destPathName为文件保存目录option为保存选项它有 3个值分别是SAVE_PHYSICAL,SAVE_VIRTUAL和SAVE_AUTO(同File类saveAs思路方法选项的值类似)SAVE_PHYSICAL指示组件将文件保存到以操作系统根目录为文件根目录目录下SAVE_VIRTUAL指示组件将文件保存到以Web应用根目录为文件根目录目录下而SAVE_AUTO则表示由组件自动选择

注:save(destPathName)作用等同于save(destPathName,SAVE_AUTO)

3、getSize

作用:取上传文件数据总长度

原型:public getSize

4、getFiles

作用:取全部上传文件以Files对象形式返回可以利用Files类操作思路方法来获得上传文件数目等信息

原型:public Files getFiles

5、getRequest

作用:取得Request对象以便由此对象获得上传表单参数的值

原型:public Request getRequest

6、AllowedFilesList

作用:设定允许上传带有指定扩展名文件当上传过程中有文件名不允许时组件将抛出异常

原型:public void AllowedFilesList(String allowedFilesList)

其中allowedFilesList为允许上传文件扩展名列表各个扩展名的间以逗号分隔如果想允许上传那些没有扩展名文件可以用两个逗号表示例如:AllowedFilesList("doc,txt,,")将允许上传带doc和txt扩展名文件以及没有扩展名文件

7、DeniedFilesList

作用:用于限制上传那些带有指定扩展名文件若有文件扩展名被限制则上传时组件将抛出异常

原型:public void DeniedFilesList(String deniedFilesList)

其中deniedFilesList为禁止上传文件扩展名列表各个扩展名的间以逗号分隔如果想禁止上传那些没有扩展名文件可以用两个逗号来表示例如:DeniedFilesList("exe,bat,,")将禁止上传带exe和bat扩展名文件以及没有扩展名文件

8、MaxFileSize

作用:设定每个文件允许上传最大长度

原型:public void MaxFileSize(long maxFileSize)

其中maxFileSize为为每个文件允许上传最大长度当文件超出此长度时将不被上传

9、TotalMaxFileSize

作用:设定允许上传文件总长度用于限制次性上传数据量大小

原型:public void TotalMaxFileSize(long totalMaxFileSize)

其中totalMaxFileSize为允许上传文件总长度

1、ContentDisposition

作用:将数据追加到MIME文件头CONTENT-DISPOSITION域jspSmartUpload组件会在返回下载信息时自动填写MIME文件头CONTENT-DISPOSITION域如果用户需要添加额外信息请用此思路方法

原型:public void ContentDisposition(String contentDisposition)

其中contentDisposition为要添加数据如果contentDisposition为null则组件将自动添加"attachment;"以表明将下载文件作为附件结果是IE浏览器将会提示另存文件而不是自动打开这个文件(IE浏览器般根据下载文件扩展名决定执行什么操作扩展名为doc将用word打开扩展名为pdf将用acrobat打开等等)

2、downloadFile

作用:下载文件

原型:共有以下 3个原型可用第个最常用后两个用于特殊情况下文件下载(如更改内容类型更改另存文件名)

① 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为下载后默认另存文件名

3、文件上传篇

表单要求

对于上传文件FORM表单有两个要求:

1、METHOD应用POST即METHOD="POST"

2、增加属性:ENCTYPE="multipart/form-data"

下面是个用于上传文件FORM表单例子:

ACTION="/jspSmartUpload/">

上传例子

1、上传页面

本页面提供表单让用户选择要上传文件点击"上传"按钮执行上传操作

页面源码如下:

文件上传

上传文件选择

ENCTYPE="multipart/form-data">

1、

2、

3、

4、

2、上传处理页面do_

本页面执行文件上传操作页面源码中详细介绍了上传思路方法使用方法在此不赘述了

页面源码如下:

<%--

文件名:do_

作 者:纵横软件Software制作中心雨亦奇(zhsoft88@)

--%>

<%@ page contentType="text/html; char=gb2312" language="java"

import=".*,.*" errorPage="" %>

文件上传处理页面

<%

// 新建个SmartUpload对象

SmartUpload su = SmartUpload;

// 上传化

lize(pageContext);

// 设定上传限制

// 1.限制每个上传文件最大长度

// eSize(10000);

// 2.限制总上传数据长度

// axFileSize(20000);

// 3.设定允许上传文件(通过扩展名限制),仅允许doc,txt文件

// dFilesList("doc,txt");

// 4.设定禁止上传文件(通过扩展名限制),禁止上传带有exe,bat,

jsp,htm,html扩展名文件和没有扩展名文件

// FilesList("exe,bat,jsp,htm,html,,");

// 上传文件

;

// 将上传文件全部保存到指定目录

count = ("/upload");

(count+"个文件上传成功!

");

// 利用Request对象获取参数的值

("TEST="+ameter("TEST")

+"

");

// 逐提取上传文件信息同时可保存文件

for ( i=0;i

{

file = e(i);

// 若文件不存在则继续

(ing) continue;

// 显示当前文件信息

("

");

("

");

("

");

("

");

("

");

("

");

("

表单项名(FieldName)"

+ ldName + "

文件长度(Size)" +

e + "

文件名(FileName)"

+ eName + "

文件扩展名(FileExt)"

+ eExt + "

文件全名(FilePathName)"

+ ePathName + "


");

// 将文件另存

// ("/upload/" + eName);

// 另存到以WEB应用根目录为文件根目录目录下

// ("/upload/" + eName,

_VIRTUAL);

// 另存到操作系统根目录为文件根目录目录下

// ("c:temp" + eName,

_PHYSICAL);

}

%>

4、文件下载篇

1、下载链接页面

页面源码如下:

下载

点击下载

2、下载处理页面do_ do_展示了如何利用jspSmartUpload组件来下载文件从下面源码中就可以看到下载何其简单

源码如下:

<%@ page contentType="text/html;char=gb2312"

import=".*" %><%

// 新建个SmartUpload对象

SmartUpload su = SmartUpload;

// 化

lize(pageContext);

// 设定contentDisposition为null以禁止浏览器自动打开文件

//保证点击链接后是下载文件若不设定则下载文件扩展名为

//doc时浏览器将自动用word打开它扩展名为pdf时

//浏览器将用acrobat打开

tDisposition(null);

// 下载文件

adFile("/upload/如何赚取我第桶金.doc");

%>

注意执行下载页面在Java脚本范围外(即<% ... %>的外)不要包含HTML代码、空格、回车或换行等有话将不能正确下载不信话可以在上述源码中%><%的间加入个换行符再下载下保证出错它影响了返回给浏览器数据流导致解析出错

3、如何下载中文文件

jspSmartUpload虽然能下载文件但对中文支持不足若下载文件名中有汉字则浏览器在提示另存文件名时显示是堆乱码很扫人兴上面例子就是这样(这个问题也是众多下载组件所存在问题很少有人解决搜索不到相关资料可叹!)

为了给jspSmartUpload组件增加下载中文文件支持我对该组件进行了研究发现对返回给浏览器另存文件名进行UTF-8编码后浏览器便能正确显示中文名字了这是个令人高兴发现于是我对jspSmartUpload组件SmartUpload类做了升级处理增加了toUtf8String这个思路方法改动部分源码如下:

public void downloadFile(String s, String s1, String s2, i)

throws ServletException, IOException, SmartUploadException

{

(s null)

throw IllegalArgumentException("File '" + s +

"' not found (1040).");

((""))

throw IllegalArgumentException("File '" + s +

"' not found (1040).");

(!isVirtual(s) && m_denyPhysicalPath)

throw SecurityException("Physical path is

denied (1035).");

(isVirtual(s))

s = m_lPath(s);

file = (s);

FileInputStream fileinputstream = FileInputStream(file);

long l = ;

boolean flag = false;

k = 0;

a0 = [i];

(s1 null)

m_tType("application/x-msdownload");

( 0)

m_tType("application/x-msdownload");

m_tType(s1);

m_tLength(()l);

m_contentDisposition = m_contentDisposition != null ?

m_contentDisposition : "attachment;";

(s2 null)

m_("Content-Disposition",

m_contentDisposition + " filename=" +

toUtf8String(getFileName(s)));

( 0)

m_("Content-Disposition",

m_contentDisposition);

m_("Content-Disposition",

m_contentDisposition + " filename=" + toUtf8String(s2));

while((long)k < l)

{

j = (a0, 0, i);

k j;

m_(a0, 0, j);

}

;

}

/**

* 将文件名中汉字转为UTF8编码串,以便下载时能正确显示另存文件名.

* 纵横软件Software制作中心雨亦奇2003.08.01

* @param s 原文件名

* @ 重新编码后文件名

*/

public String toUtf8String(String s) {

StringBuffer sb = StringBuffer;

for ( i=0;i<;i) {

char c = (i);

(c >= 0 && c <= 255) {

(c);

} {

b;

try {

b = ng(c).getBytes("utf-8");

} catch (Exception ex) {

.(ex);

b = [0];

}

for ( j = 0; j < ; j) {

k = b[j];

(k < 0) k 256;

("%" + tring(k).

toUpperCase);

}

}

}

ng;

}

注意源码中粗体部分原jspSmartUpload组件对返回文件未作任何处理现在做了编码转换工作将文件名转换为UTF-8形式编码形式UTF-8编码对英文未作任何处理对中文则需要转换为%XX形式toUtf8String思路方法中直接利用Java语言提供编码转换思路方法获得汉字UTF-8编码的后将其转换为%XX形式

将源码编译后打包成拷贝到Tomcatshared/lib目录下(可为所有WEB应用所共享)然后重启

Tomcat服务器就可以正常下载含有中文名字文件了另toUtf8String思路方法也可用于转换含有中文超级链接以保证链接有效有WEB服务器不支持中文链接

小结:jspSmartUpload组件是应用JSP进行B/S开发过程中经常使用上传下载组件它使用简单方便现在我又为其加上了下载中文名字文件支持真个是如虎添翼必将赢得更多开发者青睐 2009-2-123:42:55

疯狂代码 /


本文标签: 文件 上传 下载 方法 组件