文档库 最新最全的文档下载
当前位置:文档库 › Smartupload组建 实现上传功能代码

Smartupload组建 实现上传功能代码

1、课程名称:Smartupload组件

使用Smartupload上传文件

2、知识点

2.1、上次课程的主要知识点

1、JavaBean的基础语法

2、JavaBean的四种范围

2.2、本次预计讲解的知识点

1、使用Smartupload上传文件

3、具体内容

在各个站点上经常发现的功能就是上传文件,如果要想在JSP中进行文件的上传,则必须使用一系列的IO操作,本身比较麻烦,所以一般上传的时候都直接使用各个上传组件:? Smartupload:使用比较广泛的一个组件

? Apac he FileUpload:Struts框架中使用的就是此种上传

3.1、直接上传文件

如果要想上传文件,则必须使用上传文件的控件框,类型为file。

SmartUpload01.htm:

SmartUpload

选择文件:

如果要想实现上传,直接把smartupload.jar包拷贝到WEB-INF/lib目录之中,同时在WEB

目录下建立一个upload文件夹,此文件夹保存全部的上传文件。

如果要想使用smartupload上传,则必须按照以下的步骤操作:

? 实例化Smartupload对象

? 初始化上传操作

? 准备上传

? 将上传的文件进行保存

SmartUpload01.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<%@ page import="org.lxh.smart.*" %>

Smartupload

<%

// 1、实例化smartupload对象

SmartUpload smart = new SmartUpload() ;

// 2、初始化上传

smart.initialize(pageContext) ;

// 3、准备上传

smart.upload() ;

// 4、保存上传文件

smart.save("upload") ;

%>

程序运行完成之后,发现在上传的文件夹之中并没有任何的图片存在,这是因为上传的时候表单没有进行封装,因为现在表单中的内容不在像之前那样只是一个简单的文本了,对于

图片,必须进行多媒体的封装,所以上传表单修改为以下形式:

选择文件:

再次运行之后,发现图片已经可以正确的保存到了文件夹之中。

3.2、封装表单的问题

表单必须进行多媒体封装之后才可以进行上传的操作,但是一旦表单封装之后对于普通的数据却又无法取得,例如以下代码:

SmartUpload02.htm:

SmartUpload

姓名:

选择文件:

SmartUpload02.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<%@ page import="org.lxh.smart.*" %>

Smartupload

<%

// 1、实例化smartupload对象

SmartUpload smart = new SmartUpload() ;

// 2、初始化上传

smart.initialize(pageContext) ;

// 3、准备上传

smart.upload() ;

// 4、保存上传文件

smart.save("upload") ;

%>

姓名:<%=request.getParameter("uname")%>

以上的程序运行的时候发现了两个问题:

? 无法直接使用request对象,取得表单中的其他参数

? 新的文件替换掉了旧的文件

解决1:如果表单被封装之后,要取得封装表单里的内容,则只能使用smartupload中提供的特定方法完成,而且此方法必须在smartupload准备上传的语句之后。

姓名:<%=smart.getRequest().getParameter("uname")%>

解决2:之前所有的上传文件,上传之后的文件名称与之前的名称是一样的,所以此时可以经过处理让用户自己决定上传的名称。

具体操作代码参考《3.3、重新命名文件名称》。

3.3、重新命名文件名称

在重新命名文件名称的时候,对于文件的原有后缀是不应该进行修改的,所以在命名之前必须先取得后缀名称。

SmartUpload03.htm:

SmartUpload

图片名称:

选择文件:

SmartUpload03.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>

<%@ page import="org.lxh.smart.*" %>

Smartupload

<%

// 1、实例化smartupload对象

SmartUpload smart = new SmartUpload() ;

// 2、初始化上传

smart.initialize(pageContext) ;

// 3、准备上传

smart.upload() ;

// 取得上传的文件后缀

String ext = smart.getFiles().getFile(0).getFileExt() ;

// 取得用户自己输入的名称:

String name = smart.getRequest().getParameter("uname") ;

String fileName = name + "." + ext ;

// 保存文件

smart.getFiles().getFile(0).saveAs(getServletContext().getRealPath("/")+

"upload//"+fileName) ;

%>

姓名:<%=ext%>

注意:

虽然此时,可以为上传的文件名称进行重命名,但是现在所有的名称是由客户端自己输入的,就很难保证不会有重复的情况发生。所以此时,最好可以为上传的图片随机设置一个文件名称,此名称可以不用重复。可以按照以下的方式声明:

? IP地址+ 时间戳+ 三位随机数

? 例如:

|- IP地址:192.168.1.254

|- 时间:2008-8-7 16:29:32.345

|- 三位随机数:123

|- 19216800125420080807162932345123.后缀

IPTimeStamp.java:

package org.lxh.util;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Random;

public class IPTimeStamp {

private SimpleDateFormat sdf = null;

private String ip = null;

public IPTimeStamp() {

}

public IPTimeStamp(String ip) {

this.ip = ip;

}

public String getIPTimeRand() { StringBuffer buf = new StringBuffer();

if (this.ip != null) {

// 进行拆分操作

String s[] = this.ip.split("\\.");

for (int i = 0; i < s.length; i++) {

buf.append(this.addZero(s[i], 3));

}

}

buf.append(this.getTimeStamp()); Random r = new Random();

for (int i = 0; i < 3; i++) {

buf.append(r.nextInt(10)) ;

}

return buf.toString();

}

private String addZero(String str, int len) { StringBuffer s = new StringBuffer();

s.append(str);

while (s.length() < len) {

s.insert(0, "0");

}

return s.toString();

}

public String getDate() {

this.sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

return this.sdf.format(new Date());

}

public String getDateComplete() {

this.sdf = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒SSS毫秒"); return this.sdf.format(new Date());

}

public String getTimeStamp() {

this.sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");

return this.sdf.format(new Date());

}

}

SmartUpload04.htm:

SmartUpload

选择文件:

SmartUpload04.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%> <%@ page import="org.lxh.smart.*" %>

<%@ page import="org.lxh.util.*" %>

Smartupload

<%

// 1、实例化smartupload对象

SmartUpload smart = new SmartUpload() ;

// 2、初始化上传

smart.initialize(pageContext) ;

// 3、准备上传

smart.upload() ;

// 取得上传的文件后缀

String ext = smart.getFiles().getFile(0).getFileExt() ;

// 取得用户自己输入的名称:

IPTimeStamp its = new IPTimeStamp(request.getRemoteAddr()) ;

String fileName = its.getIPTimeRand() + "." + ext ;

// 保存文件

smart.getFiles().getFile(0).saveAs(getServletContext().getRealPath("/") +"upload//"+fileName) ;

%>

3.4、上传操作的相关说明

在开发中关于图片的上传有以下两种保存形式。

1、直接在数据库之中建立一个BLOB字段,所有的文件通过IO流的方式向里面直接写文件,那么以后数据库备份的时候直接备份整个数据库即可,但是如果使用BLOB的话,在数据库更新的时候比较麻烦,BLOB字段更新不了。只能先删除再插入。

2、直接把上传的图片保存在一个上传的文件夹之中,在数据库中做一个字段,保存图片的名称,之后在显示的时候直接通过标签显示图片。这种做法,数据库的更改方便,但是备份的时候就需要两份了,一份是数据,另外一份是上传的图片。(使用后者)。

4、总结

1、使用smartupload可以方便的实现文件的上传功能

2、所有上传的内容文件需要进行重新命名

5、预习任务

1、复习接口的定义、代理设计、工厂设计、对象引用传递、JDBC

2、DAO设计模式(视频)

3、简单Servlet程序

6、作业

使用Oracle下的emp表完成操作。

建立myemp表,表的结构和内容直接复制emp表(除了mgr、deptno字段之外),为myemp 表中添加一个photo的字段,用于保存雇员的照片,此字段的长度为50。默认值为“nophoto.jpg”。

使用JSP+JDBC的方式完成对myemp表的CRUD操作,同时可以修改雇员已经上传好的照片。

删除雇员的时候也应该删除图片。

上传照片的时候,数据库中的photo字段,只保存图片的名称,在显示的时候直接使用标签进行显示。图片名称使用IP地址+时间戳+三位随机数的方式生成。

相关文档