文件上传是web应用中一种常见的功能,例如,博客网站、论坛网站、视频网站都提供了文件上传功能。本实例将向大家介绍文件上传功能的实现,为了提高上传文件的效率,文件上传模块提供了单文件上传与多文件上传。没有限制文件上传的数量,但是上传文件的总长度不能超过5MB。<br>
设计思路:<br>
由于本实例实现了多文件上传,所以需要在表单(form)中添加多个文件标签(file)。将所有文件标签放置在一个区域中,当用户添加的文件标签的高度,超出该区域的高度时,页面中将显示滚动条。
在该页面中包含有“添加”、“删除”、“上传”、“取消”按钮,当用户单击“添加”按钮后,页面中将添加一行内容;当用户单击
本实例中用户在文件上传页面中提交表单时,系统将访问一个servlet,在web.xml文件中该servlet访问的地址为"FileUpload"。在该servlet中首先判断用户上传的文件是否符合要求,条件成立实现文件的上传。将请求页面返回至文件上传页面。<br>
技术要点:<br>
实现文件上传应用了jspSmartUpload上传组件,该组件中主要包括了Files、Request和SmartUpload3个核心类。SmartUpload类用于实现文件的上传与下载操作。<br>
(1)File类。File类存储了所有上传的文件,并且可以获取上传文件的数量和总长度等信息。通过SmartUpload类的getFile()方法可获取Files实例。该类中常用的方法有getCount(),getSize(),getFile(int index),getCollection(),getEnumeration()
例如,下面的代码首先创建SmartUpload实例,并通过该类的getFile()方法获取Files实例,并将上传文件数目保存在session对象中。代码如下:<br>
com.jspsmart.upload.SmartUpload su=new com.jspsmart.upload.SmartUpload();
Files files = su.getFiles();
int size = files.getCount();
request.getSession().setAttribute("message","上传文件的数目为"+size);<br>
(2)Request类。Request类提供了获取表单项值的方法。由于在form表单用来实现文件上传时,需要将form表单的enctype属性设置成"multipart/form-data"。这样通过JSP的内置对象request的getParameter()方法无法获取其他表单项的值。通过Request的对象的相应方法可获取。<br>
(3)SmartUpload类。该类用于实现文件的上传与下载操作。该类中有3个重要的方法。<br>
(1)initialize()方法用于使用jspSmartUpload组件实现文件上传与下载时,必须首先必须实现initialize()方法。<br>
(2)upload()方法用来完成一些准备操作。首先在该方法中调用JSP内置对象request的getInputStream()方法获取客户端的输入流;然后通过该输入流的read()方法读取用户上传的文件数据到字节数组中;之后在循环语句中从该字节数组提取每个文件的数据,并将当前提取出的文件的信息封装到File类对象中,最后将该File类对象通过FIies类的addFile()方法添加到Files类对象中。<br>
(3)sava()方法用于实现将全部上传文件保存到指定目录下,并返回保存文件数。<br>
文章转自http://www.syym.org