MLDN
课程咨询[孔老师]QQ 1031143579孔老师QQ课程咨询留言 课程咨询[徐老师 ]QQ 945313230
徐老师QQ课程咨询留言
课程咨询[刘老师 ]QQ 514543793
刘老师QQ课程咨询留言
java培训
北京java培训
魔乐培训 高端JAVA培训 魔乐科技JAVA培训 -=> 资源中心 -=> JAVA SE技术专区 -=> JAVA网络编程 -=> 正文

Smartupload组件

 发布日期:2008-11-11 8:59:00 发布者:[IT电子教育门户]   评论:[]  浏览:
1、课程名称:Smartupload组件
 使用Smartupload上传文件
2、知识点
2.1、上次课程的主要知识点
 1、 JavaBean的基础语法
 2、 JavaBean的四种范围
2.2、本次预计讲解的知识点
 1、 使用Smartupload上传文件
3、具体内容
 在各个站点上经常发现的功能就是上传文件,如果要想在JSP中进行文件的上传,则必须使用一系列的IO操作,本身比较麻烦,所以一般上传的时候都直接使用各个上传组件:
  • Smartupload:使用比较广泛的一个组件
  • Apache FileUpload:Struts框架中使用的就是此种上传
3.1、直接上传文件
 如果要想上传文件,则必须使用上传文件的控件框,类型为file。
SmartUpload01.htm:
<html>
 <head>
  <title>SmartUpload</title>
 </head>
 <body>
  <form action="SmartUpload01.jsp" method="post">
   选择文件:<input type="file" name="pic">
   <input type="submit" value="上传">
  </form>
 </body>
</html>
 如果要想实现上传,直接把smartupload.jar包拷贝到WEB-INF/lib目录之中,同时在WEB目录下建立一个upload文件夹,此文件夹保存全部的上传文件。
 如果要想使用smartupload上传,则必须按照以下的步骤操作:
  • 实例化Smartupload对象
  • 初始化上传操作
  • 准备上传
  • 将上传的文件进行保存
SmartUpload01.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page import="org.lxh.smart.*" %>
<html>
 <head>
  <title>Smartupload</title>
 </head>
 <body>
  <%
   // 1、实例化smartupload对象
   SmartUpload smart = new SmartUpload() ;
   // 2、初始化上传
   smart.initialize(pageContext) ;
   // 3、准备上传
   smart.upload() ;
   // 4、保存上传文件
   smart.save("upload") ;
  %>
 </body>
</html>
 程序运行完成之后,发现在上传的文件夹之中并没有任何的图片存在,这是因为上传的时候表单没有进行封装,因为现在表单中的内容不在像之前那样只是一个简单的文本了,对于图片,必须进行多媒体的封装,所以上传表单修改为以下形式:
  <form action="SmartUpload01.jsp" method="post" enctype="multipart/form-data">
   选择文件:<input type="file" name="pic">
   <input type="submit" value="上传">
  </form>
 再次运行之后,发现图片已经可以正确的保存到了文件夹之中。
3.2、封装表单的问题
 表单必须进行多媒体封装之后才可以进行上传的操作,但是一旦表单封装之后对于普通的数据却又无法取得,例如以下代码:
SmartUpload02.htm:
<html>
 <head>
  <title>SmartUpload</title>
 </head>
 <body>
  <form action="SmartUpload02.jsp" method="post" enctype="multipart/form-data">
   姓名:<input type="text" name="uname"><br>
   选择文件:<input type="file" name="pic"><br>
   <input type="submit" value="上传">
  </form>
 </body>
</html>
SmartUpload02.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page import="org.lxh.smart.*" %>
<html>
 <head>
  <title>Smartupload</title>
 </head>
 <body>
  <%
   // 1、实例化smartupload对象
   SmartUpload smart = new SmartUpload() ;
   // 2、初始化上传
   smart.initialize(pageContext) ;
   // 3、准备上传
   smart.upload() ;
   // 4、保存上传文件
   smart.save("upload") ;
  %>
  <h1>姓名:<%=request.getParameter("uname")%></h1>
 </body>
</html>
 以上的程序运行的时候发现了两个问题:
  • 无法直接使用request对象,取得表单中的其他参数
  • 新的文件替换掉了旧的文件
解决1:如果表单被封装之后,要取得封装表单里的内容,则只能使用smartupload中提供的特定方法完成,而且此方法必须在smartupload准备上传的语句之后。
<h1>姓名:<%=smart.getRequest().getParameter("uname")%></h1>
解决2:之前所有的上传文件,上传之后的文件名称与之前的名称是一样的,所以此时可以经过处理让用户自己决定上传的名称。
 具体操作代码参考《3.3、重新命名文件名称》。
3.3、重新命名文件名称
 在重新命名文件名称的时候,对于文件的原有后缀是不应该进行修改的,所以在命名之前必须先取得后缀名称。
SmartUpload03.htm:
<html>
 <head>
  <title>SmartUpload</title>
 </head>
 <body>
  <form action="SmartUpload03.jsp" method="post" enctype="multipart/form-data">
   图片名称:<input type="text" name="uname"><br>
   选择文件:<input type="file" name="pic"><br>
   <input type="submit" value="上传">
  </form>
 </body>
</html>
SmartUpload03.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page import="org.lxh.smart.*" %>
<html>
 <head>
  <title>Smartupload</title>
 </head>
 <body>
  <%
   // 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) ;
  %>
  <h1>姓名:<%=ext%></h1>
 </body>
</html>
注意:
 虽然此时,可以为上传的文件名称进行重命名,但是现在所有的名称是由客户端自己输入的,就很难保证不会有重复的情况发生。所以此时,最好可以为上传的图片随机设置一个文件名称,此名称可以不用重复。可以按照以下的方式声明:
 • 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:
<html>
 <head>
  <title>SmartUpload</title>
 </head>
 <body>
  <form action="SmartUpload04.jsp" method="post" enctype="multipart/form-data">
   选择文件:<input type="file" name="pic"><br>
   <input type="submit" value="上传">
  </form>
 </body>
</html>
SmartUpload04.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page import="org.lxh.smart.*" %>
<%@ page import="org.lxh.util.*" %>
<html>
 <head>
  <title>Smartupload</title>
 </head>
 <body>
  <%
   // 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) ;
  %>
  <img src="upload/<%=fileName%>" width="300" height="200">
 </body>
</html>
3.4、上传操作的相关说明
 在开发中关于图片的上传有以下两种保存形式。
1、 直接在数据库之中建立一个BLOB字段,所有的文件通过IO流的方式向里面直接写文件,那么以后数据库备份的时候直接备份整个数据库即可,但是如果使用BLOB的话,在数据库更新的时候比较麻烦,BLOB字段更新不了。只能先删除再插入。
2、 直接把上传的图片保存在一个上传的文件夹之中,在数据库中做一个字段,保存图片的名称,之后在显示的时候直接通过<img>标签显示图片。这种做法,数据库的更改方便,但是备份的时候就需要两份了,一份是数据,另外一份是上传的图片。(使用后者)。
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字段,只保存图片的名称,在显示的时候直接使用<img>标签进行显示。图片名称使用IP地址+时间戳+三位随机数的方式生成。
java视频教程
JAVA核心_76投票程序讲解
 JAVA核心_76投票程序讲..
JAVA核心_75对象序列化练习
 JAVA核心_75对象序列化..
JAVA核心_74对象序列化
 JAVA核心_74对象序列化..
JAVA核心_73字符编码
 JAVA核心_73字符编码 ..
JAVA核心_72Scanner
 JAVA核心_72Scann..
相关文章 推荐文章
如何用Java实现FTP服务器[2.11]
Java获取URL对应的资源[1.9]
Java获取网络主机信息 [1.9]
JAVA反射机制的简单应用[12.2]
Java实现抽取网页信息[12.1]
如何用Java实现FTP服务器
在Java EE Server中实现W..
Java获取URL对应的资源
Java获取网络主机信息
JAVA反射机制的简单应用
热门文章
“网络蚂蚁”的Java实现
Java实现利用搜索引擎收集网址的程序..
分页算法(一)
一个完整的Socket例子
读取网络文件
建立推拉门式菜单
JavaScript(一)
用Javascript仿163邮箱网盘..
用JSP+JavaScript打造二级..
在Java Web应用中如何实现任务有..
今日更新
如何用Java实现FTP服务器
在Java EE Server中实现W..
Java获取URL对应的资源
Java获取网络主机信息
JAVA反射机制的简单应用
Java实现抽取网页信息
Smartupload组件
分页算法(二)
分页算法(一)
JavaScript(二)
 评一评
正在读取…
  姓名:
  评论:
    
【注】 发表评论必需遵守以下条例: !!!
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
关于我们 | 商务合作 | 招聘信息 | 客服中心 | 服务条款 | 免责声明 | 网站导航 QQ留言
Copyright 2009 魔乐培训MLDN.CN all rights reserved 版权所有 京ICP备07008611号