《教学课件第6章JSP实现图片上传》由会员分享,可在线阅读,更多相关《教学课件第6章JSP实现图片上传(12页珍藏版)》请在金锄头文库上搜索。
1、第6章 JSP实现图片上传和读取显示图片上传是指客户端通过Web应用程序将本地图片资源传输到服务器上。在客户端需要显示图片时,服务器端将图片通过网络以流的形式发送给客户端,然后利用不同的形式显示图片。掌握图片上传和读取的原理,可以帮助大家了解更多关于文件在网络中传输的知识。目前很多Web网站都提供了文件上传和下载功能。图片上传和读取显示是文件上传技术中的一种,两者的原理一致,都是将文件以二进制流的形式通过网络传输给服务器并存储在服务器上。在服务器上通常有以下两种存储文件形式。磁盘存储。将上传的文件,以文件形式存储在服务器指定的磁盘上。数据库存储。将上传的文件,存储在数据库服务器中。6.1 文件
2、上传组件介绍文件上传组件是一些开源组织发布的针对实现文件上传功能的一组class文件。jspSmartUpload和Apache的common-fileupload是两个比较流行的文件上传组件。这两个组件都可以在JSP中实现文件上传。本节使用Apache的common-fileupload组件实现图片上传。6.1.1 HTML中文件上传组件介绍HTML中元素可以创建文件上传组件。该控件带有一个文本框和浏览按钮。使用该组件时要注意以下几点。该元素必须出现在form表单内。必须为该元素的name属性指定属性值。form的method方法必须设置为post。form元素enctype标签属性值必须设
3、置为multipart/form-data。要处理上载到服务器的文件,服务器必须有可以处理multipart/form-data提交的进程。6.1.2 common-fileupload组件简介common-fileupload组件是apache的开源项目之一。用该组件可实现一次上传一个或多个文件,并可限制文件大小。可以从http:/jakarta.apache.org/commons/ fileupload/下载到该组件。该组件在许多其他开源项目中被使用,如struts、WebWork等。该组件由几个核心类组成,下面对这几个类进行简单的介绍。(1)DiskFileUpload类。(2)Fil
4、eItem类用来封装单个表单字段元素的数据,一个表单字段元素对应一个FileItem对象,通过调用FileItem对象的方法可以获得相关表单字段元素的数据。(3)FileUploadException类。在文件上传过程中,可能发生各种各样的异常,如网络中断、数据丢失等。为了对不同异常进行适当的处理,Apache文件上传组件还开发了4个异常类,其中FileUploadException是其他异常类的父类,其他几个类只是被间接调用的底层类,对于Apache组件调用人员来说,只需对FileUploadException异常类进行捕获和处理即可。6.1.3 文件在服务器端的存储形式在本章开始处已经提到
5、,在服务器端存储文件主要有两种方式:磁盘存储和数据库存储。在这里使用的是后者,利用数据库存储来将图片上传到服务器端。这两种存储方式各有利弊。利用数据库来存储这些资源会导致数据库的处理效率降低,但相对安全。利用磁盘来存储图片资源安全性相对来说比较低,但不会影响到处理的效率。本书利用数据库来存储上传的图片信息。对于图片这种大文件,数据库中提供了专用字段类型来存储,如BLOB、MEDIUMBLOB、LONGBLOB。6.2 JSP中处理图片数据信息本节主要介绍上传界面的设计,以及在JSP中对图片数据的处理和与数据库的交互。分步介绍会帮助大家对每一个步骤都有深入的了解。6.2.1 页面的设计与实现本章
6、中的实例需要有以下几个JSP页面,上传页面、图片列表页面和图片显示页面。(1)上传页面提供文件上传功能。该页面中有以下几个HTML标记元素。(2)图片列表页面将已经上传到服务器中的图片全部显示在页面中,图片名称以超链接形式显示在页面中,单击该超链接可以显示该图片名称对应的图片内容。(3)图片显示页面,负责图片内容的显示,6.2.2 文件上传处理上传页面可以进行图片上传操作。图片先被上传到服务器,再被文件上传处理程序进行处理,最后存储到数据库中,前面已经对common-fileupload组件进行了简单介绍,也对该组件中的几个关键类进行了讲解。在实现文件上传处理过程中,主要使用到了DiskFil
7、eUpload类和FileItem类,6.2.3 查询图片列表从数据库中得到所有的上传图片信息,并且将结果显示在页面上。图片名称字段是以超链接形式显示在页面中的。这样的目的是要通过单击该超链接来显示该图片的内容。执行以上代码便可以从数据库中得到所有的上传图片信息,并且将结果显示在页面上。在上面的代码中,图片名称字段是以超链接形式显示在页面中的。这样的目的是要通过单击该超链接来显示该图片的内容。6.2.4 图片内容显示在上面代码中,从数据库中读取的图片内容是以Blob形式返回。Blob是内置类型,它将二进制大对象(Binary Large Object)存储为数据库表某一行中的一个列值。该类型有
8、几个常用方法,ServletResponse.getOutputStream()方法提供了一种输出流,用于向客户端发送二进制数据。ServletOutputStream对象通常通过ServletResponse.getOutputStream()方法获取。6.3 完整的图片上传与读取显示的实现本章中以上两小节中介绍了在JSP中如何实现图片的上传和显示。在图片上传时使用到了Apache的common-fileupload组件。图片读取显示时使用到了Blob、ServletOutputStream等类。本节借助以上两小节介绍的知识点来完成完整的实现网站上传和读取显示图片功能,步骤如下所示。6.4
9、小结common-fileupload组件提供了实现文件上传的功能,在JSP中可以借用该组件来实现图片上传的功能。本章通过使用common-fileupload组件来实现图片的上传。该组件主要使用DiskFileUpload和FileItem两个核心类来实现文件上传功能。熟悉并掌握这两个类中的关键方法将有助于学习JSP中实现图片上传技术。本章中也涉及到了数据库中存储大类型数据的知识,在SQL Server 2000数据库中提供了BLOB、MEDIUMBLOB、LONGBLOB 3种数据类型来进行大类型数据的存储。本章中使用了MEDIUNBLOB类型来存储图片。在实现图片的存储和读取时使用了InputStream和OutputStream类,在第2章中也提到了这两个类,这两个类主要应用于文件的读写操作。