图片上传的设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
图片上传的设计与实现
二.设计目的
运用jsp开发工具和数据库开发一个小型的基于Web系统。

要求提交详细的设计说明书及各步骤所需图表和文档,对复杂的代码段和程序段,应画出程序流程图。

在界面设计中,画出每个窗口的布局。

通过本实践性教学环节,能较好地巩固jsp基本知识,jsp连接数据库实现动态网页。

三.需求分析
如今时代,互联网已经进入我们的生活,而互联网上就有图片上传,显示,访问等等功能,有着很大的市场空间。

图片上传必须实现:
1.数据库访问模块:利用JavaBean封装对数据库的操作,主要包括连接
数据库、添加、删除、查询数据表、关闭连接等功能;
2.上传模块:通过上传组件实现图片的上传。

3.显示模块:提供图片信息列表的显示效果。

4.查看模块:点击可以显示图片的内容。

四.总体设计
图片上传是指客户端通过Web应用程序将本地图片资源传输到服务器上。

在客户端需要显示图片时,服务器端将图片通过网络以流的形式发送给客户端,然后利用不同的形式显示图片。

图片上传必须要对电子相册有,用户注册,用户注册,添加相片,修改相册,用户反馈,管理用户,如图1所示。

图1 总体设计
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
1.文件上传组件介绍
文件上传组件是一些开源组织发布的针对实现文件上传功能的一组class 文件。

jspSmartUpload和Apache的common-fileupload是两个比较流行的文件上传组件。

这两个组件都可以在JSP中实现文件上传。

本节使用Apache的common-fileupload组件实现图片上传。

2.HTML中文件上传组件介绍
HTML中<input type="file"/>元素可以创建文件上传组件。

该控件带有一个文本框和浏览按钮。

使用该组件时要注意以下几点。

该元素必须出现在form 表单内。

必须为该元素的name属性指定属性值。

form的method方法必须设置为post。

form元素enctype标签属性值必须设置为multipart/form-data。

要处理上载到服务器的文件,服务器必须有可以处理multipart/form-data提交的进程。

mon-fileupload组件简介
common-fileupload组件是apache的开源项目之一。

用该组件可实现一次上传一个或多个文件,并可限制文件大小。

可以从/commons/ fileupload/下载到该组件。

该组件在许多其他开源项目中被使用,如struts、WebWork等。

该组件由几个核心类组成,下面对这几个类进行简单的介绍。

(1)DiskFileUpload类。

(2)FileItem类用来封装单个表单字段元素的数据,一个表单字段元素对应一个FileItem对象,通过调用FileItem对象的方法可以获得相关表单字段元素的数据。

(3)FileUploadException类。

在文件上传过程中,可能发生各种各样的异常,如网络中断、数据丢失等。

为了对不同异常进行适当的处理,Apache文件上传组件还开发了4个异常类,其中FileUploadException是其他异常类的父类,其他几个类只是被间接调用的底层类,对于Apache组件调用人员来说,只需对FileUploadException异常类进行捕获和处理即可。

4.文件在服务器端的存储形式
在服务器端存储文件主要有两种方式:磁盘存储和数据库存储。

在这里使用的是后者,利用数据库存储来将图片上传到服务器端。

这两种存储方式各有
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊利弊。

利用数据库来存储这些资源会导致数据库的处理效率降低,但相对安全。

利用磁盘来存储图片资源安全性相对来说比较低,但不会影响到处理的。

File-tbl表结构如图1所示。

表1 File-tbl表结构
5.页面的设计与实现
(1)上传页面提供文件上传功能。

该页面中有以下几个HTML标记元素。

(2)图片列表页面将已经上传到服务器中的图片全部显示在页面中,图片名称以超链接形式显示在页面中,单击该超链接可以显示该图片名称对应的图片内容,如图2所示。

图2 图片列表页面的效果
(3)图片显示页面,负责图片内容的显示,效果如图3所示。

┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
图3 图片显示页面的效果
代码实现如下:
<PRE class=java name="code"><%@ page language="java" pageEncoding="gb2312"%> <%@ page
import="java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*, java.sql.*,com.jspsmart.upload.*,java.util.*"%>
<%@ page import="mainClass.*" %>
<html>
<head>
<title>My JSP 'uploadimage.jsp' starting page</title>
</head>
<body>
<%
SmartUpload sma=new SmartUpload();
long file_max_size=4000000;
String filename1="",ext="",testvar="";
6.文件上传处理
上传页面可以进行图片上传操作。

图片先被上传到服务器,再被文件上传
处理程序进行处理,最后存储到数据库中,
前面已经对common-fileupload组件进行了简单介绍,也对该组件中的几
个关键类进行了讲解。

在实现文件上传处理过程中,主要使用到DiskFileUpload
类和FileItem类,选择上传图片后的效果如图4所示。

┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
图4 选择上传图片后的效果图片上传成功后的效果如图5所示:
图5 图片上传成功后的效果代码实现如下:
ext=myf.getFileExt();
int file_size=myf.getSize();
String saveurl="";
if(file_size < file_max_size){
Calendar cal=Calendar.getInstance();
String filename=String.valueOf(cal.getTimeInMillis()); saveurl=request.getRealPath("/")+url;
saveurl+=filename+"."+ext;
myf.saveAs(saveurl,sma.SAVE_PHYSICAL);
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊ myclass mc=new myclass(request.getRealPath("data/data.mdb"));
mc.executeInsert("insert into [path]
values('uploadfiles/"+filename+"."+ext+"')");
out.println("图片上传成功!");
response.sendRedirect("showimg.jsp");
}
}
}catch(Exception e){
e.printStackTrace();
7.查询图片列表
从数据库中得到所有的上传图片信息,并且将结果显示在页面上。

图片名称字段是以超链接形式显示在页面中的。

这样的目的是要通过单击该超链接来显示该图片的内容。

执行以上代码便可以从数据库中得到所有的上传图片信息,并且将结果显示在页面上。

在上面的代码中,图片名称字段是以超链接形式显示在页面中的。

这样的目的是要通过单击该超链接来显示该图片的内容。

如图图片上传列表6所示。

图6 图片上传列表
代码实现如下:
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊"age, addr) Values (" +
ISOtoGb2312.convert( request.getParameter("id")) + "," +
ISOtoGb2312.convert( request.getParameter("name")) + "," +
ISOtoGb2312.convert( request.getParameter("sex")) + "," +
ISOtoGb2312.convert( request.getParameter("age")) + "," +
ISOtoGb2312.convert( request.getParameter("addr")) + ")";
stmt.executeUpdate(strSQL);
ResultSet rs; //建立ResultSet(结果集)对象
rs = stmt.executeQuery("SELECT * FROM tab02"); //执行SQL语句
%>
<CENTER>
<TABLE bgcolor=pink>
<TR bgcolor=silver>
8.图片内容显示
在上面代码中,从数据库中读取的图片内容是以Blob形式返回。

Blob是内置类型,它将二进制大对象(Binary Large Object)存储为数据库表某一行中的一个列值。

该类型有几个常用方法,
ServletResponse.getOutputStream()方法提供了一种输出流,用于向客户端发送二进制数据。

ServletOutputStream对象通常通过ServletResponse.getOutputStream()方法获取。

图片内容显示如图7所示。

图7 图片内容显示
代码实现如下:
public class AdlistArraylist {
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊private Connection conn = null;
private List list = new ArrayList();
private BaseDBConnection db = new BaseDBConnection();
private PreparedStatement pstm = null;
private ResultSet rs = null;
public List getPath(int type){
String sql = "select path from adlist where type="+type;
//String s = "select path from adlist where type = "+type+" order by id"; conn = db.getConn();
try {
pstm = conn.prepareStatement(sql);
rs = pstm.executeQuery();
while(rs.next()){
list.add(rs);
}
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊六.总结
common-fileupload组件提供了实现文件上传的功能,在JSP中可以借用该组件来实现图片上传的功能。

使用common-fileupload组件来实现图片的上传。

该组件主要使用DiskFileUpload和FileItem两个核心类来实现文件上传功能。

熟悉并掌握这两个类中的关键方法将有助于学习JSP中实现图片上传技术。

本章中也涉及到了数据库中存储大类型数据的知识,在SQL Server 2000数据库中提供了BLOB、MEDIUMBLOB、LONGBLOB 3种数据类型来进行大类型数据的存储。

本章中使用了MEDIUNBLOB类型来存储图片。

在实现图片的存储和读取时使用了InputStream和OutputStream类这两个类主要应用于文件的读写操作。

相关文档
最新文档