-
1 知识链接
-
2 任务实现
-
3 同步实训
【问题引入】
在Web应用系统中常会使用到文件的上传及下载,比如发送或查看带有附件的邮件、QQ群中群文件的上传与下载等,文件的上传下载功能从技术上是如何实现的呢?
【实现思路】
目前网络中有很多实用的文件上传组件,可以帮助我们实现文件上传的功能,应用较多的是SmartUpload组件,该组件使用简单,下面就来重点学习该组件的使用。
【知识链接】
1.SmartUpload简介
SmartUpload组件是一个实现文件上传的免费组件,因为使用简单方便而被广泛使用。使用SmartUpload组件具有以下几个特点:
使用简单:SmartUpload组件可以方便地嵌入到JSP文件中,在JSP文件中仅编写少量代码即可完成文件的上传和下载功能,十分方便。
能够全程控制上传内容:使用SmartUpload组件提供的对象及操作方法,可以获得全部上传文件的信息,包括文件名称、类型、大小等,方便操作。
能够对上传文件的大小、类型进行控制:为了避免在上传过程中出现异常数据,在SmartUpload组件中,专门提供了相应的方法用于限制不符合要求的文件数据。
2.获取和部署SmartUpload组件
SmartUpload组件可以在网络上自由下载,解压下载的.zip文件,查找到smartupload.jar文件,将这个.jar文件放在Web项目的\WEB-INF\lib文件夹下。
3.设置表单属性
一般的输入类型(如text、password、radio、checkbox、select)传送表单数据到服务器时,所使用的编码方式为application/x-www-form-urlencoded,这也是表单采用post方式时的默认编码方式。在接受表单数据时,可以直接使用request.getParameter()来取得。
但是文件通常都是一些大容量的二进制数据,要将它们传送到服务器时,必须将表单的编码方式设置为multipart/form-data,这样浏览器会以二进制流的形式上传数据。因此需要在表单属性中添加属性enctype,该属性的设置方法如下:
<form enctype="multipart/form-data"method="post">
其中method属性必须是post。可使用SmartUpload对象的getRequest()方法获取com.jspsmart.upload.Request对象,通过该对象获取表单中的信息。
4.SmartUpload组件常用类
(1)File类
File类的作用是封装了单个上传文件所包含的所有信息。通过调用File类的方法,我们可以方便地获取到有关上传文件的信息。
表6-1 File类的常用方法
| 方法名称 | 方法描述 |
| public void saveAs(String destFilePathName) | 将文件保存,参数destFilePathName是保存的文件名 |
| public void saveAs(String destFilePathName,int optionSaveAs) | 将文件保存,参数destFilePathName是保存的文件名,参数optionSaveAs表示保存的选项 |
| public boolean isMissing() | 用于判断用户是否选择了文件,也即对应的表单项是否有值。选择了文件时,它返回false。未选文件时,它返回true |
| public String getFieldName() | 取HTML表单中对应于此上传文件的表单项的名字 |
| public String getFileName() | 取上传文件的文件名(不含目录信息) |
| public String getFilePathName() | 取上传文件的文件全名(带目录) |
| public String getFileExt() | 取文件扩展名(后缀) |
| public int getSize() | 取文件长度(以字节计) |
| public String getContentString() | 获取文件的内容,返回值为字符串类型 |
(2)Files类
Files类与File类的区别在于,File类包含了单个上传文件的信息,而Files类表示所有上传文件的集合,通过它可以得到上传文件的数量、大小等信息。Files类提供的常用方法如表6-2所示。
表6-2 Files类的常用方法
| 方法名称 | 方法描述 |
| public int getCount() | 取得上传文件的数目 |
| public File getFile(int index) | 取得指定位移处的文件对象File |
| public long getSize() | 取得上传文件的总长度,可用于限制一次性上传的数据量大小 |
| public Collection getCollection() | 将所有上传文件对象以Collection的形式返回,以便其它应用程序引用,浏览上传文件信息 |
(3)SmartUpload类
SmartUpload类用于实现文件的上传与下载操作,SmartUpload类提供的常用方法如表6-3所示。
表6-3 SmartUpload类的常用方法
| 方法名称 | 方法描述 |
| public final void initialize(javax.servlet.jsp.PageContext pageContext) | 执行上传下载的初始化工作,必须第一个执行 |
| public void upload() | 上传文件数据。在initialize方法后执行这个方法。 |
| public int save(String destPathName) | 将全部上传文件保存到指定目录下,并返回保存的文件个数 |
| public void setAllowedFilesList(String allowedFilesList) | 设定允许上传带有指定扩展名的文件,当上传过程中有文件名不允许时,组件将抛出异常。其中,allowedFilesList为允许上传的文件扩展名列表,各个扩展名之间以逗号分隔。如果想允许上传那些没有扩展名的文件,可以用两个逗号表示。例如:setAllowedFilesList("doc,txt,,") |
| public void setDeniedFilesList( String fileList) | 指定了禁止上传的文件扩展名列表,每个扩展名之间以逗号分隔 |
| public void setMaxFileSize(long filesize) | 设定每个文件允许上传的最大长度 |
| public void setTotalMaxFileSIze(long totalfilesize) | 设定允许上传文件的总长度 |


