`
sunasheng
  • 浏览: 123381 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

smartupload组件(文件上传功能)

 
阅读更多

smartupload 组件:完成上传文件功能。一般使用表单的 file 元素:

<form >

       上传图片: <input type="file" name="pic">

</form>

常见的上传组件:

Smartupload Apache 公司的 Fileupload

上传:

完成上传功能需要 smartupload 组件的支持,也就是 smartupload.jar 文件,将他放到根目录下的 WEB-INF 下的 lib 文件夹中。

注意:开发中表单中上传文件时,表单的提交方式一定要设置成 post

图片上传(表单封装)

范例 :图片上传

upload.jsp

<%@page contentType="text/html;charset=gb2312"%>

<html>

       <body>

              <form action="smart.jsp" method="post" >

                     上传图片: <input type="file" name="pic">

                     <input type="submit" value=" 上传 ">

              </form>

       </body>

</html>

smart.jsp

根目录下建立一个名为 upload 的文件夹。用于存放上传的文件。

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

<jsp:useBean id="smartupload" class="org.lxh.smart.SmartUpload"/>

<html>

       <body>

       <%

              smartupload.initialize(pageContext);           // 初始化上传

              smartupload.upload();                             // 准备上传

              smartupload.save("upload");                 // 保存文件

       %>

       </body>

</html>

运行结果: 发现上传之后在 upload 中找不到我们上传的图片。

原因: 正常情况下我们用表单提交的是文本数据,而此处要上传文件,那么就必须对表单进行封装。

form 表单中存在的一个 enctype 属性。用于封装我们的表单。

修改 upload.jsp

<%@page contentType="text/html;charset=gb2312"%>

<html>

       <body>

              <form action="smart.jsp" method="post" enctype="multipart/form-data" >

                     上传图片: <input type="file" name="pic">

                     <input type="submit" value=" 上传 ">

              </form>

       </body>

</html>

运行结果 :正常上传。而且文件名称与上传前的名称一致。

表单封装后, request 无法取得参数

范例:

修改 upload.jsp

<%@page contentType="text/html;charset=gb2312"%>

<html>

       <body>

              <form action="smart.jsp" method="post" >

姓名: <input type=”text” name=”name”><br>

                     上传图片: <input type="file" name="pic">

                     <input type="submit" value=" 上传 ">

              </form>

       </body>

</html>

修改 smart.jsp

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

<jsp:useBean id="smartupload" class="org.lxh.smart.SmartUpload"/>

<html>

       <body>

       <%

String name = request.getParameter(“name”);

              smartupload.initialize(pageContext);         // 初始化上传

              smartupload.upload();                                // 准备上传

              smartupload.save("upload");                        // 保存文件

       %>

       </body>

</html>

修改之后发现,通过 request.getParameter() 方法无法获取提交过来的参数 name

应该使用 smartupload request 方法。

修改 smart.jsp

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

<jsp:useBean id="smartupload" class="org.lxh.smart.SmartUpload"/>

<html>

       <body>

       <%

              smartupload.initialize(pageContext);         // 初始化上传

              smartupload.upload();                                // 准备上传

              smartupload.save("upload");                        // 保存文件

String name = smartupload.getRequest().getParameter(“name”);

       %>

       </body>

</html>

这样之后就可以接受表单提交过来的参数了。

但是要注意 :虽然 request getParameter 方法不能够在此处使用,但是 request 的其他方放照样可以继续使用。

 

但是这种情况下我们也不难发现,如果上传已经上传过的图片(因为上传后文件名称不变),所以存放上传照片的文件夹里会出现‘后上传的覆盖掉原来上传的同名文件’的情况。

为上传文件手动更改名称

前台输入文件名称。

修改文件名称时要保持文件后缀不变。

修改 smart.jsp

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

<jsp:useBean id="smartupload" class="org.lxh.smart.SmartUpload"/>

<html>

       <body>

       <%

              smartupload.initialize(pageContext);         // 初始化上传

              smartupload.upload();                                // 准备上传

String name = smartupload.getRequest().getParameter(“name”);// 从客户端获取文件名

String ext = smartupload.getFiles().getFile(0).getFileExt();// 获取上传文件的后缀, 0 表示第一个上传的文件

name = name + “.” +ext;// 完整的文件名称

String path = this.getServletContext().getRealPath(“/”)+”upload/”+name;// 获取完整的保存路径

smartupload.getFiles().getFile(0).saveAs(path);// 保存文件, saveAs 中的参数必须为完整的保存路径名

       %>

    <img src = “upload/”<%=name%> width=”” height=””>// 显示上传后的图片

       </body>

</html>

但是以上程序也存在问题,就是无法保证用户输入的文件名称不会重复。

所以我们将对上传的文件自动更名。

为上传文件自动更改名称

如何才能让文件名称不会重复呢?

可以这样设置文件名称:

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

但是这里又有问题了,就是 IP 的补 0 问题。例如 IP 162.198.80.7 。这样出来的名称要这样的形式 162198080007 。所以我们创建一个 javaBean 来用于生成文件名称。

范例: IPTimeStamp.java

import java.text.SimpleDateFormat;

import java.util.Random;

 

public class IPTimeStamp {

       private String ip;

 

       public IPTimeStamp() {

       }

 

       public IPTimeStamp(String ip) {

              this.ip = ip; // 通过 IPTimeStamp 的构造方法设置 ip 地址

       }

    // 生成时间的方法,例如: 20111201213523

       public String getTimeStamp() {

              String temp = null;

              SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");

              temp = sdf.format(new java.util.Date());

              return temp;

       }

     // 生成我们要求的格式的 IP

       public String getIPTimeStampRand() {

              StringBuffer buf = new StringBuffer();

              if (ip != null) {

                     String str[] = this.ip.split("\\.");// 按照“ . “来拆分

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

                            buf.append(this.addZero(str[i], 3));// 将拆分完的并且补 0 之后的放入 buf

                     }

              }

              buf.append(this.getTimeStamp());// 将生成好格式的时间放入 buf

              Random rand = new Random();

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

                     buf.append(rand.nextInt(10)) ;// 将生成好的随机数放入 buf

              }

              return buf.toString() ;

       }

     //ip 被拆分后怎么补 0 的方法

       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();// 返回生成好的文件名称

       }

}

修改 upload.jsp

<%@page contentType="text/html;charset=gb2312"%>

<html>

       <body>

              <form action="smart.jsp" method="post" >

                     上传图片: <input type="file" name="pic">

                     <input type="submit" value=" 上传 ">

              </form>

       </body>

</html>

修改 smart.jsp

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

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

<jsp:useBean id="smartupload" class="org.lxh.smart.SmartUpload"/>

<html>

       <body>

       <%

              IPTimeStamp its = new IPTimeStamp(request.getRemoteAddr()) ; // IP 传入,获取生成文件名称类的对象

              request.setCharacterEncoding("GBK") ;

              smartupload.initialize(pageContext) ;    // 初始化上传

              smartupload.upload() ;                               // 准备上传

              String name=its. getIPTimeStampRand()+"."+ smartupload.getFiles().getFile(0).getFileExt() ;// 通过 IPTimeStamp 的对象获取到生成好的文件名称,并组合好完整的文件名称(包含后缀名)

              String fileName = this.getServletContext().getRealPath("/") + "upload/" + name ;// 将上传好的文件放到虚拟目录下的 upload 文件夹下

              smartupload.getFiles().getFile(0).saveAs(fileName) ;

       %>

       <img src="upload/<%=name%>" width="300" height="200">

       </body>

</html>

上传说明

一般在系统开发中,需要将一些图片的信息保存在数据库中。一般有两种方式。

第一种:

       直接在数据库中保存图片信息,通过 BLOG 字段存储。

          如果上传文件比较大,那么这种方式不方便。

如果数据库备份时,仅仅备份数据库即可。

第二种:

              直接将图片放到指定的文件夹中,然后在数据库中以普通文本的信息保存图片的路径。

              如果上传文件比较大,那么这种方式方便。

              如果数据库备份时,不仅得备份数据库,还有备份图片信息。

范例: 保存图片路径。(第二种方式)

有如下数据库脚本( Oracle

DROP SEQUENCE myseq ;

DROP TABLE person ;

CREATE SEQUENCE myseq ;

CREATE TABLE person(

       id           NUMBER             PRIMARY KEY NOT NULL ,

       name              VARCHAR2(60)    NOT NULL ,

       photo             VARCHAR2(100) 

) ;

完成两个功能: 1. 插入信息。 2. 从数据库中将全部的信息列表显示。

insert.htm

<html>

       <body>

              <form action="insert.jsp" method="post" enctype="multipart/form-data">

                     姓名: <input type="text" name="name"><br>

                     上传的图片: <input type="file" name="pic"><br>

                     <input type="submit" value=" 上传 ">

              </form>

       </body>

</html>

之后建立一个连接数据库类,用于连接数据库操作。

DataBaseConnection.java

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

 

public class DataBaseConnection {

       public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

       public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:MLDN" ;

       public static final String DBUSER = "scott" ;

       public static final String DBPASS = "tiger" ;

       private Connection conn  = null ;

       public DataBaseConnection(){

              try {

                     Class.forName(DBDRIVER) ;

                     conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;

              } catch (ClassNotFoundException e) {

                     // TODO Auto-generated catch block

                     e.printStackTrace();

              } catch (SQLException e) {

                     // TODO Auto-generated catch block

                     e.printStackTrace();

              }

       }

       public Connection getConnection(){

              return this.conn ;

       }

       public void close(){

              if(this.conn!=null){

                     try {

                            this.conn.close() ;

                     } catch (SQLException e) {

                            e.printStackTrace();

                     }

              }

       }

}

insert.jsp

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

<%@ page import="java.sql.*"%>

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

<jsp:useBean id="smartupload" class="org.lxh.smart.SmartUpload"/>

<jsp:useBean id="dbc" class="org.lxh.dbc.DataBaseConnection"/>

<html>

       <body>

       <%

              request.setCharacterEncoding("GBK") ;

       try{

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

              request.setCharacterEncoding("GBK") ;

              smartupload.initialize(pageContext) ;    // 初始化上传

              smartupload.upload() ;                               // 准备上传

              String photoname = its.getIPTimeStampRand() + "." + smartupload.getFiles().getFile(0).getFileExt() ;

              String sql = "INSERT INTO person(id,name,photo) VALUES (myseq.nextVal,?,?)" ;

              PreparedStatement pstmt = dbc.getConnection().prepareStatement(sql) ;

              pstmt.setString(1,smartupload.getRequest().getParameter("name")) ;

              pstmt.setString(2,photoname) ;

              pstmt.executeUpdate() ;

              pstmt.close() ;

              String fileName = this.getServletContext().getRealPath("/") + "upload/" + photoname ;

              smartupload.getFiles().getFile(0).saveAs(fileName) ;

       }catch(Exception e){

       }finally{

              dbc.close() ;

       }

       %>

       </body>

</html>

显示

list.jsp

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

<%@ page import="java.sql.*"%>

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

<jsp:useBean id="dbc" class="org.lxh.dbc.DataBaseConnection"/>

<html>

       <body>

       <%

              request.setCharacterEncoding("GBK") ;

       try{

              String sql = "SELECT id,name,photo FROM person " ;

              PreparedStatement pstmt = dbc.getConnection().prepareStatement(sql) ;

              ResultSet rs = pstmt.executeQuery() ;

       %>

              <center>

              <table border="1" width="80%">

                     <tr>

                            <td> 编号 </td>

                            <td> 姓名 </td>

                            <td> 照片 </td>

                     </tr>

              <%

                     while(rs.next()){

                            int id = rs.getInt(1) ;

                            String name = rs.getString(2) ;

                            String photo = rs.getString(3) ;

              %>

                     <tr>

                            <td><%=id%></td>

                            <td><%=name%></td>

                            <td><img src="upload/<%=photo%>" width="30" height="25"></td>

                     </tr>

              <%

                     }

              %>

              </table>

              </center>

       <%

              pstmt.close() ;

       }catch(Exception e){

       }finally{

              dbc.close() ;

       }

       %>

       </body>

</html>

分享到:
评论

相关推荐

    利用jspSmartUpload组件进行文件上传

    总的来说,JSP Smart Upload是一个实用且功能丰富的文件上传组件,它简化了Java Web开发中的文件上传操作,让开发者可以专注于业务逻辑,而无需过多关注上传细节。结合其提供的文档和示例,开发者可以快速上手并实现...

    使用jspSmartUpload组件在jsp中实现上传和下载

    jspSmartUpload作为一款专为JSP设计的文件上传组件,以其易用性、灵活性和强大的功能受到开发者们的青睐。本文将深入探讨如何利用jspSmartUpload组件,在JSP环境中高效地实现文件的上传与下载功能。 ### jsp...

    jspSmartUpload 组件的上传下载完整实例

    下载即可运行,但是这个压缩包不支持中文名称的文件下载功能,我上传了一个可以下载中文的不会乱码的jspSmartUpload 组件,网址:http://download.csdn.net/detail/huahuahailang/4265620 照着使用,即可下载中文。

    smartupload文件上传功能

    ### smartupload文件上传功能详解 #### 一、smartupload组件概览 ...总之,smartupload组件为Java Web应用提供了强大的文件上传功能,通过合理的配置和编码实践,可以轻松实现安全、高效的文件上传操作。

    使用jspSmartUpload实现文件上传下载

    首先,`jspSmartUpload`是一个基于Java Servlet的文件上传组件,它提供了一套完整的API来处理文件上传的过程。这个组件支持多文件上传,可以设定上传文件的大小限制,还能处理各种类型的文件格式。通过使用`jsp...

    SmartUpload组件及使用示例

    "SmartUpload组件"就是这样一个专门针对文件上传任务而设计的工具,尤其在基于Java的JSP(JavaServer Pages)开发中应用广泛。本文将详细介绍SmartUpload组件及其使用示例,帮助开发者更好地理解和运用这个强大的...

    jspsmartupload组件实现文件上传

    NULL 博文链接:https://systemxgl.iteye.com/blog/267472

    smartupload组件

    SmartUpload组件是一款强大的Java上传组件,它为Web应用提供了便捷的文件上传功能。在Web开发中,文件上传是一项常见的需求,比如用户提交表单时可能需要上传头像、附件等。SmartUpload通过封装HTTP请求,使得处理...

    jspsmartupload组件源码.zip_ jspSmartUpload_jsp_jsp 上传文件_jspSmartUplo

    **SmartUpload.java**:这是JSpsmartupload组件的主要类,它包含了所有与文件上传相关的操作。它提供了一系列的方法,如添加上传文件、设置上传限制、处理上传错误等。开发者可以使用这个类来控制上传过程,比如限制...

    SmartUpload组件上传下载实例

    通过SmartUpload组件,开发者可以轻松地集成文件上传和下载功能,极大地提高了开发效率,同时也提升了用户的使用体验。在实际项目中,根据需求进行适当定制,可以构建出稳定且高效的文件管理系统。

    在jsp中使用smartupload组件上传文件.rar_SmartUpload jsp_jsp 上传_jsp 上传文件_sma

    本篇文章将深入探讨如何在Windows环境下使用SmartUpload组件在JSP中实现文件上传功能。 首先,我们需要了解SmartUpload组件的基本概念。SmartUpload是基于Java的开源项目,由Marc Eppel开发。它提供了一套API,允许...

    jspSmartUpload组件上传和下载代码

    `jspSmartUpload`组件是Java Web开发中用于实现文件上传和下载功能的一款强大工具,尤其在基于JSP的B/S(Browser/Server)架构应用程序中,它以其便捷性和高效性受到开发者们的青睐。本篇文章将深入探讨`jsp...

    用smartUpload组件实现文件上传

    这是一个利用smartUpload组件实现文件上传的例子,已经测试通过!! 附带该组件只要放到服务器的lib下边重启服务器就能实现

    jspSmartUpload组件

    `jspSmartUpload`是一款在Java Web开发中广泛使用的文件上传与下载组件,尤其在基于JSP(JavaServer Pages)的应用中,它提供了方便、高效的文件处理功能。本篇文章将深入探讨该组件的核心特性、工作原理以及如何在...

    SmartUpload组件使用(视频)

    SmartUpload组件是一个强大的文件上传工具,常用于Web应用程序中,为用户提供方便、高效的文件上传功能。这个组件以其灵活的配置和丰富的API,使得开发者能够轻松地集成到自己的项目中,处理各种复杂的上传需求。 ...

    JSP 文件的上传与下载 smartupload组件

    在这个场景中,我们关注的是JSP中的文件上传和下载功能,以及如何利用SmartUpload组件来实现这一目标。SmartUpload是一个强大的文件上传组件,它简化了在JSP中处理文件上传的过程。 首先,我们要理解文件上传的基本...

    SmartUpload组件实现上传下载的简单示例

    总结来说,SmartUpload组件为Java Web开发者提供了一套全面的文件上传下载解决方案,通过其强大的功能和易用的API,可以极大地提高开发效率,同时保证上传下载过程的安全性和稳定性。在实际项目中,结合适当的前端...

    jsp上传完整源码及SmartUpload组件

    【标题】"jsp上传完整源码及SmartUpload组件"揭示了这个压缩包是关于使用JavaServer Pages(JSP)技术实现文件上传功能的一个实例。在Web开发中,文件上传是常见的用户交互需求,例如用户上传个人照片、文档或音频...

    java用法smartupload组件实现文件上传的方法_.docx

    总之,SmartUpload组件通过提供一套完整的文件上传解决方案,显著简化了Java Web应用中的文件上传操作。它允许开发者快速实现文件上传功能,同时提供了灵活性以适应各种需求。然而,使用任何组件时都要注意安全风险...

    SmartUploadservlet文件上传下载

    在Java Web开发中,文件上传和下载功能是常见的需求,特别是在构建B/S系统时。`SmartUpload`组件是一个专门用于处理此类任务的工具,它极大地简化了开发者的工作,使得在JSP环境中实现文件上传和下载变得轻而易举。...

Global site tag (gtag.js) - Google Analytics